文 / vincentzhhtml
原文链接:http://www.cnblogs.com/vincentzh/p/6034187.htmlnode
这里写点 Hadoop2.6.0集群的安装和简单配置,一方面是为本身学习的过程作以记录,另外一方面但愿也能帮助到和LZ同样的Hadoop初学者,去搭建本身的学习和练习操做环境,后期的 MapReduce 开发环境的配置和 MapReduce 程序开发会慢慢更新出来,LZ也是边学习边记录更新博客,路人若有问题欢迎提出来一块儿探讨解决,不足的地方但愿路人多指教,共勉! web
本文主要详述配置 Hadoop 集群,默认路人已经掌握了 Hadoop 单机/伪分布式的配置,不然请查阅 Hadoop2.6.0安装 — 单机/伪分布。单机/伪分布式的配置是基础,集群的配置也不过是再单机/伪分布的基础上横向扩展节点而已,另外在开发的过程当中,也是单机/伪分布都要去用,或者和集群之间相互切换进行调试和运行代码。vim
环境的准备和上篇(Hadoop2.6.0安装 — 单机/伪分布)的环境一致,由于LZ也是在一台电脑上搞的虚拟机学习的,Virtual Box虚拟机下Ubuntu14.04 64位系统,Hadoop版本就不用再啰嗦了吧,题目上写清楚了。此处集群包含了3个节点(机器),其中一个作 Master 节点(NameNode),其余两台机器做为 Slave 节点(DataNode)。网络
OK,既然集群有三个节点,须要先将三个虚拟环境准备好,才能开始集群的配置,整个流程以下:app
VirtualBox须要为三台机器配置网络,以保证集群中的全部节点之间能够互相通讯,须要更改网络链接方式为桥接(Bridge)模式,才能实现虚拟机之间的网络互联,同时须要确保各节点之间的Mac地址不一样。VirtualBox虚拟机几种网络链接方式的异同能够去这里查看。eclipse
为方便区分各个节点,能够去修改下各个节点的主机名(直接改成你可以辨识的主机名)。ssh
1 $sudo vim /etc/hostname
此处使用了一个Master节点,两个Slave节点,须要在hosts文件中添加上节点的与IP的映射关系(全部节点都须要修改,节点直接用SSH直接链接的时候能够直接使用主机名链接)。webapp
1 $sudo vi /etc/hosts
测试网络链接。全部节点之间的链接都须要逐个测试,以保证全部节点直接可以互联互通。分布式
1 $ping Slave0 -c 3
这个操做是要让 Master 节点能够无密码 SSH 登录到各个 Slave 节点上。
首先生成 Master 节点的公匙,在 Master 节点的终端中执行(由于改过主机名,因此还须要删掉原有的再从新生成一次):
$cd ~/.ssh # 若是没有该目录,先执行一次ssh localhost,生成.ssh目录 $rm ./id_rsa* # 删除以前生成的公匙(若是有) $ssh-keygen -t rsa # 一直按回车就能够
$cat ./id_rsa.pub >> ./authorized_keys
在 Master 节点将上公匙传输到 Slave0 和 Slave1 节点:
$scp ~/.ssh/id_rsa.pub hadoop@Slave0:/home/hadoop/
$scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/
将Master节点的公钥传输到Slave节点后,须要分别在两个节点上将Master节点传输过来的公钥加入受权。这样,在 Master 节点上就能够无密码 SSH 到各个 Slave 节点了,可在 Master 节点上执行以下命令进行检验,以下图所示:
配置好 Hadoop 相关的全部环境变量,具体配置在这里,一样若是为了方便操做 DataNode,能够将 Slave 节点上Hadoop安装目录下的 /sbin 和 /bin 都添加到 $PATH 环境变量中。
集群/分布式模式须要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。(比伪分布多了一个slaves文件)
1. slaves文件,将做为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,因此在伪分布式配置时,节点即做为 NameNode 也做为 DataNode。分布式配置能够保留 localhost,也能够删掉,让 Master 节点仅做为 NameNode 使用。LZ直接将 Slave0 和 Slave1 都加入其中。
2. core-site.xml(此处须要主义 fs.defaultFS 属性,LZ在用window上的eclipse配置开发环境的时候一直配置不成功,但将 Master 改成具体IP地址以后没问题,这里将在开发环境配置的时候详述)
1 <configuration> 2 <property> 3 <name>fs.defaultFS</name> 4 <value>hdfs://Master:9000</value> 5 </property> 6 <property> 7 <name>hadoop.tmp.dir</name> 8 <value>file:/usr/local/hadoop/tmp</value> 9 <description>Abase for other temporary directories.</description> 10 </property> 11 </configuration>
3. hdfs-site.xml,dfs.replication 通常设为 3,但咱们只有两个 Slave 节点,因此 dfs.replication 的值仍是设为 2:
1 <configuration> 2 <property> 3 <name>dfs.namenode.secondary.http-address</name> 4 <value>Master:50090</value> 5 </property> 6 <property> 7 <name>dfs.replication</name> 8 <value>1</value> 9 </property> 10 <property> 11 <name>dfs.namenode.name.dir</name> 12 <value>file:/usr/local/hadoop/tmp/dfs/name</value> 13 </property> 14 <property> 15 <name>dfs.datanode.data.dir</name> 16 <value>file:/usr/local/hadoop/tmp/dfs/data</value> 17 </property> 18 </configuration>
4. mapred-site.xml(须要先重命名,默认文件名为 mapred-site.xml.template,由于默认状况只配置HDFS),而后配置修改以下:
1 <configuration> 2 <property> 3 <name>mapreduce.framework.name</name> 4 <value>yarn</value> 5 </property> 6 <property> 7 <name>mapreduce.jobhistory.address</name> 8 <value>Master:10020</value> 9 </property> 10 <property> 11 <name>mapreduce.jobhistory.webapp.address</name> 12 <value>Master:19888</value> 13 </property> 14 </configuration>
5. yarn-site.xml
1 <configuration> 2 <property> 3 <name>yarn.resourcemanager.hostname</name> 4 <value>Master</value> 5 </property> 6 <property> 7 <name>yarn.nodemanager.aux-services</name> 8 <value>mapreduce_shuffle</value> 9 </property> 10 </configuration>
配置好后,将 Master 上的 /usr/local/hadoop 文件夹复制到各个节点上。
注:若是以前在Master节点上启动过Hadoop,须要在copy以前先删除hadoop目录下的 tmp 文件和 logs下的文件。在 Master 节点上执行:
1 $cd /usr/local 2 $sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件 3 $sudo rm -r ./hadoop/logs/* # 删除日志文件 4 $tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制 5 $cd ~ 6 $scp ./hadoop.master.tar.gz Slave0:/home/hadoop
copy结束后,在Slave0和Slave1节点上直接将copy过来的目录解压便可(Master节点须要和Slave节点有相同的配置)。
1 $sudo rm -r /usr/local/hadoop # 删掉旧的(若是存在) 2 $sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local 3 $sudo chown -R hadoop /usr/local/hadoop
首次启动须要先在 Master 节点执行 NameNode 的格式化,以后的启动不须要再去进行:
1 $hdfs namenode -format
逐个启动全部守护进程,并在各个节点经过jps查看全部守护进程启动状况。
1 $start-dfs.sh 2 $start-yarn.sh 3 $mr-jobhistory-daemon.sh start historyserve
Master节点
Slave0节点
Slave节点
要确保全部的守护进程都可以正常启动。另外还须要在 Master 节点上经过命令 hdfs dfsadmin -report
查看 DataNode 是否正常启动,若是 Live datanodes 不为 0 ,则说明集群启动成功。例如我这边一共有 2 个 Datanodes:
关闭集群一样也是在Master节点上执行
1 $stop-yarn.sh 2 $stop-dfs.sh 3 $mr-jobhistory-daemon.sh stop historyserver
若是有任何节点没法启动或启动不正常,须要在各自的 logs 文件中查找启动日志,逐个排查问题缘由。常见的缘由以下: