yarn-site.xml
文件配置
<configuration>
<!--指定可以在YARN上运行MapReduce程序-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--YARN HA配置-->
<!--开启ResourceManager HA功能-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--标志ResourceManager-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<!--集群中ResourceManager的ID列表,后面的配置将引用该ID-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--ResourceManager1所在的节点主机名-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>centos01</value>
</property>
<!--ResourceManager2所在的节点主机名-->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>centos02</value>
</property>
<!--ResourceManager1的Web页面访问地址-->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>centos01:8088</value>
</property>
<!--ResourceManager2的Web页面访问地址-->
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>centos02:8088</value>
</property>
<!--ZooKeeper集群列表-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>centos01:2181,centos02:2181,centos03:2181</value>
</property>
<!--启用ResouerceManager重启的功能,默认为false-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--用于ResouerceManager状态存储的类-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
</configuration>
yarn.nodemanager.aux-services
:NodeManager上运行的附属服务,需配置成mapreduce_shuffle才可正常运行MapReduce程序。YARN提供了该配置项用于在NodeManager上扩展自定义服务,MapReduce的Shuffle功能正是一种扩展服务。
yarn.resourcemanager.ha.enabled
:开启ResourceManager HA功能。
yarn.resourcemanager.cluster-id
:标识集群中的ResourceManager。如果设置该属性,需要确保所有的ResourceManager在配置中都有自己的ID。
yarn.resourcemanager.ha.rm-ids
:ResourceManager的逻辑ID列表。可以自定义,此处设置为“rm1,rm2”,后面的配置将引用该ID。
yarn.resourcemanager.hostname.rm1
:指定ResourceManager对应的主机名。另外,可以设置ResourceManager的每个服务地址。
yarn.resourcemanager.webapp.address.rm1
:指定ResourceManager的Web端访问地址。
yarn.resourcemanager.zk-address
:指定集成的ZooKeeper的服务地址。
yarn.resourcemanager.recovery.enabled
:启用ResourceManager重启的功能。
yarn.resourcemanager.store.class
:用于ResourceManager状态存储的类。
同步其他节点
scp -r /opt/modules/hadoop-2.8.2/etc/hadoop hadoop@centos02:/opt/modules/hadoop-2.8.2/etc
scp -r /opt/modules/hadoop-2.8.2/etc/hadoop hadoop@centos03:/opt/modules/hadoop-2.8.2/etc
启动ZooKeeper集群
分别进入每个节点的ZooKeeper安装目录,执行以下命令:
bin/zkServer.sh start
启动YARN集群
分别在centos01
和centos02
节点上进入Hadoop安装目录,执行以下命令,启动resourcemanager
:
sbin/yarn-daemon.sh start resourcemanager
分别在每个节点上进入Hadoop安装目录,执行以下命令,启动nodemanager
:
sbin/yarn-daemon.sh start nodemanager
查看各节点的java进程
jps
浏览器中查看YARN的启动状态
在浏览器中输入http://centos01:8088
:
如果访问备用ResourceManager地址http://centos02:8088
,会发现自动跳转到http://centos01:8088
。因为此时活动状态的ResourceManager在centos01
节点上,访问备用ResourceManager会自动跳转到活动ResourceManager。
测试YARN自动故障转移
在centos01
节点上执行MapReduce默认的WordCount程序,当正在执行Map任务时,新开一个SSH Shell窗口,杀掉centos01的ResourceManager进程,观察程序执行过程。若程序仍能流畅执行,说明自动故障转移生效,ResourceManager遇到故障后,自动切换到centos02
节点上继续执行。此时访问备用ResourceManager的Web页面地址http://centos02:8088
,发现可以成功访问:
启动HDFS
sbin/start-dfs.sh
启动ZKFC守护进程
在节点centos01
、centos02
:
sbin/hadoop-daemon.sh start zkfc
查看各节点的java进程以及NameNode状态
尤其要记住centos01
中的ResourceManager节点进程,因为我们一会要杀掉他做测试
开始测试
先准备好数据:
运行MapReduce之WordCount单词计数程序:
hadoop jar /opt/modules/hadoop-2.8.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.2.jar wordcount /input /output
在程序执行到map任务时在centos02
通过ssh登录centos01
杀掉centos01
的ResourceManager:
此时再在浏览器中查看YARN的状态,发现http://centos01:8088
已经无法访问,但是http://centos02:8088
可以访问并且可以看到MapReduce任务:
查看MapReduce结果
hadoop fs -cat /output/*
发现MapReduce仍然成功执行了,说明YARN HA搭建成功并且可以进行故障转移。