mapreduce程序应该是在很多机器上并行启动,而且先执行maptask,当众多的maptask都处理完自己的数据后,还需要启动众多的reduce task,这个过程如果用用户自己手动调度不太现实,需要一个自动化的调度平台——hadoop中就为运行mapreduce之类的分布式运算程序开发了一个自动化调度平台——YARN。
YARN的基本概念
yarn是一个分布式程序的运行调度平台
yarn中有两大核心角色:
1、ResourceManager
接受用户提交的分布式计算程序,并为其划分资源
管理、监控各个Node Manager上的资源情况,以便于均衡负载
2、NodeManager
管理它所在机器的运算资源(cpu + 内存)
负责接受Resource Manager分配的任务,创建容器、回收资源
YARN的安装
主节点:Resource Manager 1台
从节点:Node Manager N台
Resource Manager一般安装在一台专门的机器上
Node Manager应该与HDFS中的data node重叠在一起
修改配置文件:
yarn-site.xml
<property> <name>yarn.resourcemanager.hostname</name> <value>hadoop1</value> </property>
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> </property>
<property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>2</value> </property> |
然后复制到每一台机器上
然后在hadoop1上,修改hadoop的slaves文件,列入要启动nodemanager的机器
然后将hadoop1到所有机器的免密登陆配置好
然后,就可以用脚本启动yarn集群:
sbin/start-yarn.sh
停止:
sbin/stop-yarn.sh
启动完成后,可以在windows上用浏览器访问resourcemanager的web端口:
看resource mananger是否认出了所有的node manager节点
运行mapreduce程序
首先,为你的mapreduce程序开发一个提交job到yarn的客户端类(模板代码):
l 描述你的mapreduce程序运行时所需要的一些信息(比如用哪个mapper、reducer、map和reduce输出的kv类型、jar包所在路径、reducetask的数量、输入输出数据的路径)
l 将信息和整个工程的jar包一起交给yarn
然后,将整个工程(yarn客户端类+ mapreduce所有jar和自定义类)打成jar包
然后,将jar包上传到hadoop集群中的任意一台机器上
最后,运行jar包中的(YARN客户端类)
[root@hadoop1 ~]# hadoop jar wc.jarcn.edu360.hadoop.mr.wc.JobSubmitter