1.YARN概述
- 全称:Yet Another Resource Negotiator(另一种资源协调者)资源调度框架
2.YARN架构
1)ResourceManager: RM
- 整个集群同一时间提供服务的RM只有一个,负责集群资源的统一管理和调度
- 处理客户端的请求: 提交一个作业、杀死一个作业
- 监控我们的NM,一旦某个NM挂了,那么该NM上运行的任务需要告诉我们的AM来如何进行处理
2)NodeManager: NM
- 整个集群中有多个,负责自己本身节点资源管理和使用
- 定时向RM汇报本节点的资源使用情况
- 接收并处理来自RM的各种命令:启动Container
- 处理来自AM的命令
- 单个节点的资源管理
3)ApplicationMaster: AM
- 每个应用程序对应一个:MR、Spark,负责应用程序的管理
- 为应用程序向RM申请资源(core、memory),分配给内部task
- 需要与NM通信:启动/停止task,task是运行在container里面,AM也是运行在container里面
4)Container
- 封装了CPU、Memory等资源的一个容器
- 是一个任务运行环境的抽象
5)Client
- 提交作业
- 查询作业的运行进度
- 杀死作业
1)Client向RM提交作业(如MapReduce、Spark作业)。
2)RM为该作业分配第一个NM,与NM进行通信,要求在该NM上启动一个Container。
3)在分配的第一个Container上启动AM;
4)AM向RM进行注册,注册后Client就可以向RM查询作业的进度。同时AM向RM申请所需资源,RM告知后续的NM。
5)AM与后续的NM进行通信,告知需要的Container。
6)NM在需要的Container上执行任务。
- 以上是一个通用流程:MapReduce AM、Spark AM
3.伪分布式下:YARN配置文件的修改
- 我的配置文件路径为:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/
- 1)mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 2)yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
4.启动YARN
- 1)YARN的环境变量同Hadoop,已设置(见《大数据Hadoop之环境搭建》),直接打命令启动YARN:
sbin/start-yarn.sh
- 2)验证是否启动成功:
/** 1.查看进程:应该多了两个个
ResourceManager、NodeManager */
jps
/** 2.本地的浏览器访问:http://chao:8088
或 http://192.168.27.131:8088 */
5.启动YARN的过程中可能出现的问题
- 启动后显示:192.168.27.131: Address 192.168.27.131 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT! 但是看jps进程发现不影响YARN启动
- 原因:Mac的网卡被占用,无线无法使用时,终端的主机名会自动变成bogon
- 解决方法:在/etc/hosts文件加上192.168.27.131和对应的主机名。
- 由此想到了mac配置hosts文件同理:sudo vi /etc/hosts
6.停止YARN
sbin/stop-yarn.sh
7.提交MapReduce作业到YARN上运行
- 用自带的示例程序:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar
// 命令是hadoop jar,三个参数是pi 2 3
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi 2 3