YARN架构
1 RM(ResourceManager) + n NM(NodeManager)
ResourceManager的职责
一个集群active状态的RM只有一个,负责整个集群的资源管理和调度
处理客户端的请求(启动 / kill)
启动 / 监控ApplicationMaster(一个作业对应一个AM)
监控NM
系统的资源分配和调度
NodeManager
集群中有n个NodeManager,负责单个节点的资源管理和使用以及task的运行情况
定期向RM汇报本节点的资源使用情况和各个Container的运行状态
接收并处理RM的container启停的各种命令
单个节点的资源管理和任务管理
ApplicationMaster
每个应用 / 作业对应一个,负责应用程序的管理
数据切分
为应用程序向RM申请资源(container),并分配给内部任务
与NM通信以启停task,task是运行在container中的
task的监控和容错
Container
对任务运行情况的描述:cpu, memory, 环境变量
YARN执行流程
用户向YARN提交作业
RM为该作业分配第一个container(AM)
RM与对应的NM通信,要求NM在这个container上启动应用程序的AM
AM首先向RM注册,然后AM将为各个任务申请资源,并监控运行情况
AM采用轮询的方式通过RPC协议向RM申请和领取资源
AM申请到资源以后,便和相应的NM通信,要求NM启动任务
NM启动我们作业对应的task
YARN配置
配置etc/hadoop/mapred-site.xml
1 | cd $HADOOP_HOME |
添加如下内容
1 | <configuration> |
配置etc/hadoop/yarn-site.xml
1 | vi etc/hadoop/yarn-site.xml |
添加如下内容
1 | <configuration> |
启动YARN
1 | sbin/start-yarn.sh |
1 | jps |
说明YARN已经成功启动。
通过浏览器访问地址 http://localhost:8088
,可见页面如下
提交作业
1 | bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount |
说明需要提供输入文件及输出结果的位置。
我们先创建一个测试文件
1 | vi /tmp/input |
把input文件上传到hdfs://data/目录下
1 | bin/hadoop fs -put /tmp/input /data |
再次执行命令
1 | bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /data/input /data/out |
查看执行结果
1 | bin/hadoop fs -ls /data/out |
wordcount的结果在文件/data/out/part-r-00000里面
1 | bin/hadoop fs -text /data/out/part-r-00000 |
如果重复提交作业,会出现如下FileAlreadyExistsException
异常。
1 | bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /data/input /data/out |
所以如果要重复执行,则需要把输出文件先删除掉。