Yarn和HDFS是两个概念,所以你完全可以在启动着Hadoop集群的时候,搭建Yarn并启动
之前在没有Yarn时我们的角色分布是这样的
搭建Yarn之后会新增RM和NM角色,我们将RM分配在node03和04上做主备RM,与node01和02的NN错开。NM必须与DN一一对应,所以在node02~04上搭建NM
搭建之后的角色应该如下
NN实现主备切换时需要一个ZKFC辅助,在Yarn中却没有了这么一个辅助角色,而直接与Zookeeper通信,是因为Yarn已经把HA的模块集成进去了
下面要修改的配置文件
node01:
#在mapred-site.xml中增加
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
#在yarn-site.xml中增加
#启动自动主备切换
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
#配置这当前集群所属资源调度的id,之后在zookeeper中会已配置的值创建目录
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
#配置需要的RM
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
#具体的rm配置
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node03</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node04</value>
</property>
#配置对应的zookeeper信息
<property>
<name>hadoop.zk.address</name>
<value>node02:2181,node03:2181,node04:2181</value>
</property>
下面是具体操作流程
node01: 以root用户登录
cd $HADOOP_HOME/etc/hadoop
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml #加入上述配置信息
vi yarn-site.xml #加入上述配置信息
#将配置文件分发给node02~04
scp mapred-site.xml yarn-site.xml node02:`pwd`
scp mapred-site.xml yarn-site.xml node03:`pwd`
scp mapred-site.xml yarn-site.xml node04:`pwd`
#你会注意到 我们并没有配置NM的相关信息,因为我们之前已经在slaves文件中配置过从结点了,Yarn会自动在这些结点上启动NM,不用我们配置
配置完成就可以在node01上使用start-yarn.sh
启动yarn
需要注意的是,这只会将NM启动,而不会将RM启动,因为node01不是RM,我们需要在node03和node04上分别使用yarn-daemon.sh start resourcemanager
启动RM
这时登录http://node03:8088
或http://node04:8088
就会看到Active的RM,且Standby的RM会自动将页面跳转到Active的RM页面中
关闭Yarn时,需要在node03和node04上分别使用stop-yarn.sh
关闭RM,NM会随之关闭,由于我们之前没有配置node02~node04之间的免密,所以这一过程需要输入密码,读者可以自行配置node02~node04 之间的免密。
接下来我们在Yarn上跑一个WordCount例子实验一下
在任意结点任意位置准备一个文件,我用以下命令生成一个文件
for i in `seq 100000`; do echo "hello hadoop $i" >> data.txt; done
然后上传到HDFS里
hdfs dfs -mkdir -p /data/wc/input
,hdsf dfs -D dfs.blocksize=1048576 -put data.txt /data/wc/input
我使用官方提供的程序来跑我的数据,这个程序在$HADOOP_HOME/share/hadoop/mapreduce
下,叫做hadoop-mapreduce-examples-2.6.5.jar
我们使用以下命令跑我们的程序
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/wc/input /data/wc/output
使用hdfs dfs -ls /data/wc/output
命令查看结果,发现有如下两个文件
- _SUCCESS只是一个标识文件,代表该计算程序执行成功
- part-r-000000是计算的结果文件,注意中间的字母可以是r可以是m,r代表这个结果是最终经过reduce方法计算得来的结果,m代表这个结果只经过了map计算就得出了
我将在下一篇博客中介绍如何使用Idea开发一个WordCount程序
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20592.html