YARN产生的背景
MapReduce1.x存在的问题:单点故障和节点压力大不易扩展
只有一个job tracker,单点故障
task tracker的RPC请求全都给job tracker,当task tracker多的时候job tracker不易扩展
只支持MapReduce框架
资源利用率和运维成本
集群管理复杂,资源浪费等,Hadoop和Spark,MPI等分别的集群,不能共享,资源移动成问题,资源利用率低
催生了YARN的诞生
集群的资源管理,在HDFS2之上,在YARN上可以运行多种计算框架,操作系统级别的资源调度框架,共享HDFS的资源
不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度
xxx on YARN,与其他计算框架共享集群资源,按资源需要分配,提高集群资源的利用率
YARN架构
YARN概述
yet another resource negotiator
通用的资源管理系统
为上层应用提供统一的资源管理和调度
YARN的架构
ResourceManager-RM
整个集群同一时间提供服务的RM只有一个,负责集群资源的统一管理和调度
处理客户端的请求: 提交一个作业、杀死一个作业
监控我们的NM,一旦某个NM挂了,那么该NM上运行的任务需要告诉我们的AM来如何进行处理
NodeManager-NM
整个集群中有多个,负责自己本身节点资源管理和使用
定时向RM汇报本节点的资源使用情况
接收并处理来自RM的各种命令:启动Container
处理来自AM的命令
单个节点的资源管理
ApplicationMaster-AM
每个应用程序对应一个:MR、Spark,负责应用程序的管理
为应用程序向RM申请资源(core、memory),分配给内部task
需要与NM通信:启动/停止task,task是运行在container里面,AM也是运行在container里面
Container(跑任务)
封装了CPU、Memory等资源的一个容器
是一个任务运行环境的抽象
client
提交作业
查询作业的运行进度
杀死作业
YARN执行流程
client提交作业
RM和NM通信,要求在NM上启动container
这个container用于启动一个应用程序AM的
AM和RM进行注册,AM向RM申请资源
AM申请到资源之后就在对应的NM上启动任务,所有的任务都是以container的方式运行的
将task运行在container之上
YARN环境搭建
环境
使用版本:hadoop-2.6.0-cdh5.7.0
yarn-site.xml
mapred-site.xml
启停YARN
搭建过程(需要拷贝模板之后编辑)
1. vim mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
2. vim yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
3. 启动YARN相关的进程sbin/start-yarn.sh
4. 验证
1).jps
ResourceManager
NodeManager
2)通过浏览器访问
http://ip:8088
5. 停止YARN相关的进程
sbin/stop-yarn.sh
测试在YARN上提交作业
使用hadoop官方提供的测试用例进行测试
提交mr作业到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提交作业
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi 2 3求圆周率
2表示跟几个map
3表示取样的数量
在浏览器上看运行的流程状态