一、概述

1、Yarn介绍

资源调度平台,(管理集群资源,给任务合理分配)
(RM)ResourceManager 管理所有集群资源(内存、CPU。。。)
(NM)NodeManager 管理单个节点资源
(AM)ApplicationManager 管理单个任务
Contalner 容器

运行在YARN上的计算框架 (还有别的)
离线计算框架:MapReduce
DAG计算框架:Tez
流式计算框架:Storm
内存计算框架:Spark

2、Yarn优缺点

优点

  • 解决了单点故障问题,由于每一个任务由一个AppMaster进行调度,且可进行AppMaster出错重试,从而使单点故障影响到多个任务进行问题不存在。
  • 解决了单点压力过大问题,每一个任务由一个AppMaster进行调度,而每一个AppMaster都是由集群中资源较为充足的结点进行启动,调度任务,起到一个负载均衡的作用。
  • 完成了资源管理和任务调度的解耦,Yarn只负责对集群资源的管理,各个计算框架只要继承了AppMaster,就可以共同使用Yarn资源管理,更加充分地利用集群资源。

    3、Yarn角色

    (RM)ResourceManager
    1)处理客户端请求
    2)监控NodeManager
    3)启动或监控ApplicationManager
    4)资源的分配与调度

(NM)NodeManager
1)管理单个节点资源
处理来自ResourceManager的请求
3)处理来自ApplicationManager的命令

(AM)ApplicationManager
1)为应用程序申请资源并分配给内部的任务
2)任务的监控与容错

Contalner
Contalner是YARN中的资源抽象,它封装了某个节点的多维度资源,如内存、CPU、磁盘、网络等

4、调度器和调度算法

Apache Hadoop-1.x默认调度器是FIFO;
Apache hadoop-2.7.2之后默认调度器是容量调度器Capacity Scheduler,也称计算能力调度器;
Apache hadoop-3.2.2默认调度器是公平调度器Fair Scheduler。

1、FIFO

FIFO调度器(First In First Out): 单队列,根据提交作业的先后顺序,先到先得。
image.png
优点: 简单易懂;
缺点: 不支持多队列,生产环境很少使用。

2、容量调度器

Capacity Scheduler是Yahoo开发的多用户调度器。

  1. 容量调度器特点
    image.png

多队列 :每个队列可配置一定的资源量,每个队列内部采用FIFO调度策略;
容量保证:管理员可为每个队列设置资源最低保证和资源使用上线;
灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列;
多租户:
a. 支持多用户共享集群和多应用程序同时运行;
b. 为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源进行限定。
image.png

3、公平调度器

Fair Scheduler是Facebook开发的多用户调度器。

  1. 公平调度器特点
    image.png

与容量调度器相同点:

多队列 :每个队列可配置一定的资源量,每个队列内部采用FIFO调度策略;
容量保证:管理员可为每个队列设置资源最低保证和资源使用上线;
灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列;
多租户:
a. 支持多用户共享集群和多应用程序同时运行;
b. 为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源进行限定。

4、容量调度器和公平调度器区别

核心调度策略不同
容量调度器: 优先选择资源利用率低的队列;
公平调度器:优先选择对资源缺额比例大的。

二、部署安装

1、下载安装包

  1. wget https://downloads.apache.org/hadoop/common/hadoop-3.3.2/hadoop-3.3.2.tar.gz

2、解压

  1. mv hadoop-3.3.2.tar.gz /home/hadoop/
  2. tar -zxvf hadoop-3.3.2.tar.gz
  3. chown hadoop:hadoop -R hadoop-3.3.2*
  4. ll -rt | grep hadoop

3、修改yarn-site.xml 文件

  1. cd hadoop-3.3.2
  2. vim ./etc/hadoop/yarn-site.xml
  1. <configuration>
  2. <-- 允许跨域访问的来源,如果有多个,用逗号(,)分隔 -->
  3. <property>
  4. <name>hadoop.http.cross-origin.allowed-origins</name>
  5. <value>*</value>
  6. </property>
  7. <-- RM所在的主机 -->
  8. <property>
  9. <name>yarn.resourcemanager.hostname</name>
  10. <value>griffin</value>
  11. </property>
  12. <-- 以逗号分割的服务列表 -->
  13. <property>
  14. <name>yarn.nodemanager.aux-services</name>
  15. <value>mapreduce_shuffle,spark2_shuffle,timeline_collector</value>
  16. </property>
  17. <property>
  18. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  19. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  20. </property>
  21. <-- 存储容器日志的地方 -->
  22. <property>
  23. <name>yarn.nodemanager.log-dirs</name>
  24. <value>/tmp/logs</value>
  25. </property>
  26. <-- 是否启用日志聚合。yarn.nodemanager.remote-app-log-dir确定日志存储位置-->
  27. <property>
  28. <name>yarn.log-aggregation-enable</name>
  29. <value>true</value>
  30. </property>
  31. <-- 将日志聚合到的位置 HDFS路径 -->
  32. <property>
  33. <name>yarn.nodemanager.remote-app-log-dir</name>
  34. <value>/yarn-logs/logs</value>
  35. </property>
  36. <-- 远程日志目录前缀 -->
  37. <property>
  38. <name>yarn.nodemanager.remote-app-log-dir-suffix</name>
  39. <value>logs</value>
  40. </property>
  41. <-- 在删除聚合日志之前保留多长时间。 -->
  42. <property>
  43. <name>yarn.log-aggregation.retain-seconds</name>
  44. <value>360000</value>
  45. </property>
  46. <-- 日志聚合服务器的URL -->
  47. <property>
  48. <name>yarn.log.server.url</name>
  49. <value>http://griffin:19888/jobhistory/logs</value>
  50. </property>
  51. <-- 服务器将绑定到的实际地址 , 0.0.0.0 使RM监听所有接口非常有用 -->
  52. <property>
  53. <name>yarn.resourcemanager.bind-host</name>
  54. <value>0.0.0.0</value>
  55. </property>
  56. <-- RM web页面访问地址 -->
  57. <property>
  58. <name>yarn.resourcemanager.webapp.address</name>
  59. <value>hdp101:8088</value>
  60. </property>
  61. <!-- for java 8 -->
  62. <property>
  63. <name>yarn.nodemanager.pmem-check-enabled</name>
  64. <value>false</value>
  65. </property>
  66. <-- 是否将对容器强制实施虚拟内存限制。 -->
  67. <property>
  68. <name>yarn.nodemanager.vmem-check-enabled</name>
  69. <value>false</value>
  70. </property>
  71. </configuration>
  72. <-- 参考文档:https://blog.csdn.net/qq_35995514/article/details/120803426 -->

Yarn - 图5

4、启动

  1. su - hadoop
  2. cd sbin/
  3. ./start-yarn.sh
  1. ./stop-yarn.sh

5、jps查看和ps查看

  1. jps | grep 'ResourceManager\|NodeManager'
  2. ps -elf | grep 'ResourceManager\|NodeManager'

image.png

三、使用自带模板测试

  1. cd hadoop-2.6.5/bin
  2. ./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /sanguo /sanguoput

image.png

四、命令行操作Yarn

1、列出所有Application

  1. yarn application -list

2、根据Application状态过滤:(ALL、NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED)

  1. yarn application -list -appStates All

3、kill掉Application

  1. yarn application -kill application_1650620359034_0013

4、yarn logs 查看日志

  1. yarn logs -applicationId application_1650620359034_0013
  1. yarn logs -applicationId <ApplicationId> -containerId <ContainerId>

5、yarn applicationattempt 查看尝试运行任务

  1. yarn applicationattempt -list application_1650620359034_0013

6、yarn node 查看节点状态

  1. yarn node -list -all

7、yarn rmadmin更新配置

加载队列配置

  1. yarn rmadmin -refreshQueues

8、yarn queue 查看队列

  1. yarn queue -status default

image.png

五、Yarn的tool接口

六、Yarn工作流程

image.png
YARN在处理任务时,经历了以下几个步骤:

客户端向YARN提交一个作业(Application)。
作业提交后,RM根据从NM收集的资源信息,在有足够资源的节点分配一个容器,并与对应的NM进行通信,要求它在该容器中启动AM。
AM创建成功后向RM中的ASM注册自己,表示自己可以去管理一个作业(job)。
AM注册成功后,会对作业需要处理的数据进行切分,然后向RM申请资源,RM会根据给定的调度策略提供给请求的资源AM。
AM申请到资源成功后,会与集群中的NM通信,要求它启动任务。
NM接收到AM的要求后,根据作业提供的信息,启动对应的任务。
启动后的每个任务会定时向AM提供自己的状态信息和执行的进度。
作业运行完成后AM会向ASM注销和关闭自己。


七、作业提交流程
image.png