# mapreduce运行平台YARN

mapreduce程序应该是在很多机器上并行启动,而且先执行map task,当众多的maptask都处理完自己的数据

后,还需要启动众多的reduce task,这个过程如果用用户自己手动调度不太现实,需要一个自动化的调度平

台——hadoop中就为运行mapreduce之类的分布式运算程序开发了一个自动化调度平台——YARN

# 安装yarn集群

yarn集群中有两个角色:

主节点:Resource Manager 1台

从节点:Node Manager N台

Resource Manager一般安装在一台专门的机器上

Node Manager应该与HDFS中的data node重叠在一起

修改配置文件:

yarn-site.xml

<property>
<name>yarn.resourcemanager.hostname</name>
<value>hdp-01</value>
</property>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

然后复制到每一台机器上

scp -r yarn-site.xml hdp-02:$PWD

scp -r yarn-site.xml hdp-03:$PWD

scp -r yarn-site.xml hdp-04:$PWD

在hdp-01上,修改hadoop的slaves文件,列入要启动nodemanager的机器

192.168.137.138 hdp-01

192.168.137.139 hdp-02

192.168.137.140 hdp-03

192.168.137.141 hdp-04

将hdp-01到所有机器的免密登陆配置好

用脚本启动yarn集群:

[root@hdp-01 hadoop-2.8.4]# sbin/start-yarn.sh

停止:

[root@hdp-01 hadoop-2.8.4]# sbin/stop-yarn.sh

启动完成后,可以在windows上用浏览器访问resourcemanager的web端口:

http://hdp-01:8088

看resource mananger是否认出了所有的node manager节点

# 运行mapreduce程序

首先,为你的mapreduce程序开发一个提交job到yarn的客户端类(模板代码):

描述你的mapreduce程序运行时所需要的一些信息(比如用哪个mapper、reducer、map和reduce输出的kv类

型、jar包所在路径、reduce task的数量、输入输出数据的路径)

将信息和整个工程的jar包一起交给yarn

然后,将整个工程(yarn客户端类+ mapreduce所有jar和自定义类)打成jar包

然后,将jar包上传到hadoop集群中的任意一台机器上

最后,运行jar包中的(YARN客户端类)

[root@hdp-04 ~]# hadoop jar wc.jar renxiaoblog.hadoop.mr.wc.JobSubmitter