简介
YARN(Yet Another Resource Negotiator):通用的资源管理系统,提交任务到YARN进行统一的资源管理及调度
master: resource management:ResourceManager (RM)
job scheduling/monitoring:per-application ApplicationMaster (AM)
slave: NodeManager (NM)
RM:管理资源;客户端提交作业到RM,RM对应多个NM,RM是集群中对外提供的服务,同一时刻只有一个负责资源相关处理,客户端任务来了之后,先启动AM,然后监控AM。并且还监控NM
AM:执行运算的主体;运行在NodeManager里面的,去RM里面申请资源用于在NM上启动对应的task,每个应用程序对应一个AM,并且做数据的切分,为每个task向RM申请资源,并且和NM通信
NM:运行的程序;真正工作计算的节点,同时向RM发送心跳信息,任务执行情况;接受来自RM的请求,并且处理AM的命令
Container:对于任务的运行抽象,一个Container既可以运行AM 也可以运行具体的 map 和 reduce
2 为什么用YARN
集群资源的浪费,为整理所有集群资源,所以开始使用
3 YARN工作流程
1.client向yarn提交job,首先找ResourceManager分配资源
2.ResourceManager开启一个Container,在Container中运行一个Application manager
3.Application manager找一台nodemanager启动Application master,计算任务所需的计算
4.Application master向Application manager(Yarn)申请运行任务所需的资源
5.Resource scheduler将资源封装发给Application master
6.Application master将获取到的资源分配给各个nodemanager
7.各个nodemanager得到任务和资源开始执行map task
8.map task执行结束后,开始执行reduce task
9.map task和 reduce task将执行结果反馈给Application master
10.Application master将任务执行的结果反馈application manager
参考来自:https://www.cnblogs.com/gwyy/p/12205227.html
4 YARN配置
参照官网设置,设置单节点YARN操作,首先配置mapred-site.xml,增加如下配置,指定MapReduce的运行环境是YARN
进入etc/hadoop
然后修改mapred-site.xml.template文件名
mv mapred-site.xml.template mapred-site.xml
然后进入mapred-site.xml修改
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
然后设置yarn-site.xml,这里是固定写法
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
设置完成后执行
./sbin/start-yarn.sh
注意使用前保证HDFS服务正常启动,启动后使用JPS查看服务是否正常
服务启动成功后浏览器访问
ip:8080
例如我这里http://192.168.1.100:8088/
5 YARN使用
进入到hadoop目录下,进入share/hadoop/mapreduce
可以看到官方提供的测试的jar包
这里面以hadoop-mapreduce-examples-2.6.0-cdh5.16.1.jar为例
运行jar包
hadoop jar jar包名称 参数
计算π的值
./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar pi 2 3
6、问题
Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#4
at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:376)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1924)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.io.IOException: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
at org.apache.hadoop.mapreduce.task.reduce.ShuffleSchedulerImpl.checkReducerHealth(ShuffleSchedulerImpl.java:392)
at org.apache.hadoop.mapreduce.task.reduce.ShuffleSchedulerImpl.copyFailed(ShuffleSchedulerImpl.java:307)
at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyFromHost(Fetcher.java:366)
at org.apache.hadoop.mapreduce.task.reduce.Fetcher.run(Fetcher.java:198)
20/07/10 20:22:58 INFO mapreduce.Job: map 0% reduce 0%
20/07/10 20:23:08 INFO mapreduce.Job: map 50% reduce 0%
20/07/10 20:23:10 INFO mapreduce.Job: map 100% reduce 0%
20/07/10 20:23:15 INFO mapreduce.Job: map 100% reduce 100%
20/07/10 20:23:16 INFO mapreduce.Job: Job job_1594434206651_0002 failed with state FAILED due to: Task failed task_1594434206651_0002_r_000000
Job failed as tasks failed. failedMaps:0 failedReduces:1
解决办法
在hadoop安装目录下的etc目录下的hadoop文件中打开hdfs-site.xml文件;找到此文件的位置
然后在这个路径下找到此文件
将这个路径复制到hadoop的安装目录etc/hadoop/yarn-site.xml中
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/hadoop/app/tmp/nm-local-dir</value>
</property>
</configuration>
配置好以后重重yarn及hadoop再运行./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar pi 2 3 命令就可以了
或者也可以是以下这种情况
不健康节点 磁盘空间被使用的90%,则会被列为不健康节点,被拒绝访问
异常:error in shuffle in fetcher
原因:执行任务 shuffle 时,内存不够,所以栈溢出
解决:
mapred-site.xml
将yarn的设置给删除掉,然后加下面的配置
<property>
<name>mapreduce.reduce.shuffle.memory.limit.percent</name>
<value>0.2</value>
</property>
从0.2一直到0.6调,默认是0.7
设置好重启即可了