概述
为上层应用提供统一的资源管理和作业调度的通用框架
YARN产生背景
1.MapReduce1.x的引起的问题
MapReduce1.x.pngmaster/slave: JobTracker&TaskTracker
一个JobTracker管理多个TaskTracker
JobTracker:单点、压力大、
仅支持MapReduce作业,其他诸如Spark等架构无法运行
2.资源资源率&运维成本
所有的计算框架运行在一个集群中,共享一个集群的资源,做到按需分配。
YARN框架
把原有的JobTracker拆成两个两个进程
资源管理(ResourceManager RM),
作业调度/监控(per-application ApplicationMaster AM)
RM 和 per-node slave,NameManger 组成了数据计算框架
client: 向RM提交,杀死任务
RM:处理来自client 的请求,启动/监控AM,监控NM
AM:每个Application对应一个AM, AM向RM申请资源用于NM上启动对应的task,主要就是做数据的切分,为每个task向RM申请资源(container)
NM:真正工作+ 向RM发送心跳信息,接收来自RM的请求来启动任务,处理来自AM的命令
container:任务的运行抽象,可以看作是一系列的物理信息 memory,cpu...
执行流程
1.Client提交作业到 RM
2.RM选择一个NM,启动一个container并在其上运行一个AM
3.AM 向RM上申请资源,随后到对应的NM上启动container,然后在这些container上启动诸如map task或者reduce task即可
注意:如果作业很小, AM选择在其自己的 JVM 中运行任务
执行流程.pngYARN部署
*** 在配置好hadoop的基础上
mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
启动
sbin/start-yarn.sh
jps 发现有RM 和NM 进程则启动成功
关闭
sbin/stop-yarn.sh
通过访问8088端口可以看到yarn的web界面
提交任务到YARN上
hadoop jar jar包... # 可以使用hadoop里面的exmaple目录下的jar查看效果
提交自己开发的MR作业到YARN上运行的步骤:
1)mvn clean package -DskipTests
windows/Mac/Linux ==> Maven
2)把编译出来的jar包(项目根目录/target/...jar)以及测试数据上传到服务器
scp xxxx hadoop@hostname:directory
- 把数据上传到HDFS
hadoop fs -put xxx hdfspath - 执行作业
hadoop jar xxx.jar 完整的类名(包名+类名) args..... - 到YARN UI(8088) 上去观察作业的运行情况
6)到输出目录去查看对应的输出结果
网友评论