`
ytfei
  • 浏览: 88382 次
社区版块
存档分类
最新评论

hadoop 学习笔记

    博客分类:
  • Java
阅读更多

-

HDFS

 

提供了中央NameNode管理各 DataNode 

 

提供了数据的复制备份机制(3份) 一份拷贝在本机柜另外一台机器 另两份备份在另外一个机柜的两台机器上

 

NameNode会记录重做日志 以及记录各个DataNode中保持的数据索引,所有文件读写请求都经过NameNode几点进行分发

 

健壮性:

心跳检测

数据完整性(校验和)

快照

 

DataNode Pipelining机制 (一个DataNode写完后,会由该DataNode将数据写入下一个DataNode,如此继续)

 

问题:在一个DataNode写满后,会不会自动寻找下一个DataNode?

 

------------

hdfs 设置了 replicate 参数为 1 ,需要两台datanode 机器,加上master 等于需要3台

 

 

--------------

索引文件应该是比较小的,最多包含例如所有中文和所有英文单词(索引项不应去保存内容,高亮的处理可以用其他方式)

 

 

MapReduce

 

【Task Side-Effect Files】

So, just create any side-files in the path returned by FileOutputFormat.getWorkOutputPath() from MapReduce task to take advantage of this feature.

 

javac -classpath ${HADOOP_HOME}/hadoop-core-${HADOOP_VERSION}.jar:${HADOOP_HOME}/hadoop-mapred-${HADOOP_VERSION}.jar:${HADOOP_HOME}/hadoop-hdfs-${HADOOP_VERSION}.jar -d wordcount_classes WordCount.java 

 

 

 

javac -classpath /root/cloud/hadoop/hadoop-common-0.21.0.jar:/root/cloud/hadoop/hadoop-mapred-0.21.0.jar

:/root/cloud/hadoop/hadoop-hdfs-0.21.0.jar -d . WordCount.java

 

jar -cvf wordcount.jar -C . . 

 

 

Bye 1

Goodbye 1

Hadoop 2

Hello 2

World 2 

 

 

参考文章:使用 Linux 和 Hadoop 进行分布式计算

 

http://bbs.hadoopor.com/thread-970-1-1.html hadoop 书籍及项目

http://wenku.baidu.com/view/51734f2c7375a417866f8f42.html mapreduce一些经验

 

 

安装:

准备三台机器,修改hostname 分别为node1,node2,node3 (vi /etc/sysconfig/network : HOSTNAME=node1 ,在命令行: hostname node1)

1.edit the file conf/hadoop-env.sh to define at least JAVA_HOME

2.vi conf/core-site.xml 

<name>fs.default.name</name>

<value>hdfs://node1:9000</value>

3.vi conf/hdfs-site.xml

<property>

         <name>dfs.replication</name>

         <value>1</value> <!-- 这里配置数据要拷贝到的节点数,如果这里配置为1,则必须有两台datanode节点

     </property>

4.vi conf/mapred-site.xml

<property>

         <name>mapred.job.tracker</name>

         <value>node1:9001</value>

     </property>

 

5.vi conf/masters

node1

6.vi conf/slaves

node2

node3

7.配置各台服务器ssh登录不用密码

在node1: 如果ssh localhost需要输入密码,执行以下步骤。

 1)$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

 2)$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

否则,只要将node1的id_dsa.pub 拷贝到其他两台服务器,并在两台服务器上执行步骤2)

 

8.拷贝hadoop文件到各服务器

参考命令:

 scp -r /home/xx/hadoop-0.21.0 node2:/home/xx/hadoop-0.21.0

 

9.在node1

bin/hadoop namenode -format

bin/start-all.sh

看日志输出是否有误

10.

(记得设置各服务器的防火墙,让他们之间可以互相通信)

在每台服务器 ps -aef | grep hadoop 看进程是否正常。

测试:bin/hadoop dfs -put conf input  

bin/hadoop dfs -ls  看是否上传成功

 

打开浏览器,输入http://node1:50070/即可看到整个hadoop情况,

JobTracker情况可以看http://node1:50030/

 

参考:

http://blog.csdn.net/inkfish/archive/2010/01/07/5150717.aspx Hadoop的安装-3.完全分布模式

https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop3/?ca=drs-tp3008 用 Hadoop 进行分布式并行编程

 

 

 

 

 

 

FAQ:

1.ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs

下面给出两种解决办法,我使用的是第二种。

 

Workaround 1: Start from scratch

 

I can testify that the following steps solve this error, but the side effects won't make you happy (me neither). The crude workaround I have found is to:

 

1.     stop the cluster

 

2.     delete the data directory on the problematic datanode: the directory is specified by dfs.data.dir in conf/hdfs-site.xml; if you followed this tutorial, the relevant directory is /usr/local/hadoop-datastore/hadoop-hadoop/dfs/data

 

3.     reformat the namenode (NOTE: all HDFS data is lost during this process!)

 

4.     restart the cluster

 

When deleting all the HDFS data and starting from scratch does not sound like a good idea (it might be ok during the initial setup/testing), you might give the second approach a try.

 

Workaround 2: Updating namespaceID of problematic datanodes

 

Big thanks to Jared Stehler for the following suggestion. I have not tested it myself yet, but feel free to try it out and send me your feedback. This workaround is "minimally invasive" as you only have to edit one file on the problematic datanodes:

 

1.     stop the datanode

 

2.     edit the value of namespaceID in <dfs.data.dir>/current/VERSION to match the value of the current namenode

 

3.     restart the datanode

 

If you followed the instructions in my tutorials, the full path of the relevant file is /usr/local/hadoop-datastore/hadoop-hadoop/dfs/data/current/VERSION (background: dfs.data.dir is by default set to ${hadoop.tmp.dir}/dfs/data, and we set hadoop.tmp.dir to /usr/local/hadoop-datastore/hadoop-hadoop).

 

If you wonder how the contents of VERSION look like, here's one of mine:

 

#contents of <dfs.data.dir>/current/VERSION

 

namespaceID=393514426

 

storageID=DS-1706792599-10.10.10.1-50010-1204306713481

 

cTime=1215607609074

 

storageType=DATA_NODE

 

layoutVersion=-13

 

 

原因:每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,

但是没有晴空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp一下 的所有目录.


分享到:
评论

相关推荐

    Hadoop学习笔记

    Hadoop学习笔记,自己总结的一些Hadoop学习笔记,比较简单。

    最新Hadoop学习笔记

    **Hadoop学习笔记详解** Hadoop是一个开源的分布式计算框架,由Apache基金会开发,主要用于处理和存储海量数据。它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce,两者构成了大数据处理的基础...

    Hadoop 学习笔记.md

    Hadoop 学习笔记.md

    HADOOP学习笔记

    【HADOOP学习笔记】 Hadoop是Apache基金会开发的一个开源分布式计算框架,是云计算领域的重要组成部分,尤其在大数据处理方面有着广泛的应用。本学习笔记将深入探讨Hadoop的核心组件、架构以及如何搭建云计算平台。...

    hadoop学习笔记.rar

    《Hadoop学习笔记详解》 Hadoop,作为大数据处理领域中的核心框架,是Apache软件基金会下的一个开源项目,主要用于分布式存储和并行计算。本文将根据提供的Hadoop学习笔记,深入解析Hadoop的关键概念和实战技巧,...

    3.Hadoop学习笔记.pdf

    Hadoop是一个开源框架,用于存储和处理大型数据集。由Apache软件基金会开发,Hadoop已经成为大数据处理事实上的标准。它特别适合于存储非结构化和半结构化数据,并且能够存储和运行在廉价硬件之上。Hadoop具有高可靠...

    hadoop学习笔记(三)

    在本篇"Hadoop学习笔记(三)"中,我们将探讨如何使用Hadoop的MapReduce框架来解决一个常见的问题——从大量数据中找出最大值。这个问题与SQL中的`SELECT MAX(NUMBER) FROM TABLE`查询相似,但在这里我们通过编程...

    Hadoop学习笔记整理

    "Hadoop学习笔记整理" 本篇笔记对Hadoop进行了系统的介绍和总结,从大数据的基本流程到Hadoop的发展史、特性、集群整体概述、配置文件、HDFS分布式文件系统等方面都进行了详细的讲解。 一、大数据分析的基本流程 ...

    云计算hadoop学习笔记

    云计算,hadoop,学习笔记, dd

    Hadoop学习笔记.pdf

    在初学者的角度,理解Hadoop的组成部分以及其架构设计是学习Hadoop的基础。 首先,Hadoop的分布式文件系统(HDFS)是其核心组件之一,它具有高吞吐量的数据访问能力,非常适合大规模数据集的存储和处理。HDFS的设计...

Global site tag (gtag.js) - Google Analytics