Yarn资源调动

1.Yarn介绍

Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度。

Hadoop1.0的任务调度流程

Hadoop2.0的变化

2.Yarn三大组件介绍

1.ResourceManager

  • ResourceManager负责整个集群的资源管理和分配,是一个全局的资源管理系统。
  • NodeManager以心跳的方式向ResourceManager汇报资源使用情况(目前主要是CPU和内存的使用情况)。RM只接受NM的资源回报信息,对于具体的资源处理则交给NM自己处理。
  • YARN Scheduler根据application的请求为其分配资源,不负责application job的监控、追踪、运行状态反馈、启动等工作。

2.NodeManager

  • NodeManager是每个节点上的资源和任务管理器,它是管理这台机器的代理,负责该节点程序的运行,以及该节点资源的管理和监控。YARN集群每个节点都运行一个NodeManager。
  • NodeManager定时向ResourceManager汇报本节点资源(CPU、内存)的使用情况和Container的运行状态。当ResourceManager宕机时NodeManager自动连接RM备用节点。
  • NodeManager接收并处理来自ApplicationMaster的Container启动、停止等各种请求。

3.ApplicationManager

  • 用户提交的每个应用程序均包含一个ApplicationMaster,它可以运行在ResourceManager以外的机器上。
  • 负责与RM调度器协商以获取资源(用Container表示)。
  • 将得到的任务进一步分配给内部的任务(资源的二次分配)。
  • 与NM通信以启动/停止任务。
  • 监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
  • 当前YARN自带了两个ApplicationMaster实现,一个是用于演示AM编写方法的实例程序DistributedShell,它可以申请一定数目的Container以并行运行一个Shell命令或者Shell脚本;另一个是运行MapReduce应用程序的AM—MRAppMaster。
  • 注:RM只负责监控AM,并在AM运行失败时候启动它。RM不负责AM内部任务的容错,任务的容错由AM完成。

3.Yarn 特点:

1.支持多计算框架

2.资源利用率高,运行成本低,数据共享。

4.Yarn基本组成

ResourceManager :一个集群资源调度的管理者

NodeManager :一个节点资源调度的管理者(集群各个节点资源的工作者)

ApplicationMaster : 一个计算任务的管理者

Container : 容器(cpu 和 内存)

5.Yarn提交任务的流程

  1. client向RM提交应用程序,其中包括启动该应用的ApplicationMaster的必须信息,例如ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
  2. ResourceManager启动一个container用于运行ApplicationMaster。
  3. 启动中的ApplicationMaster向ResourceManager注册自己,启动成功后与RM保持心跳。
  4. ApplicationMaster向ResourceManager发送请求,申请相应数目的container。
  5. 申请成功的container,由ApplicationMaster进行初始化。container的启动信息初始化后,AM与对应的NodeManager通信,要求NM启动container。
  6. NM启动启动container。
  7. container运行期间,ApplicationMaster对container进行监控。container通过RPC协议向对应的AM汇报自己的进度和状态等信息。
  8. 应用运行结束后,ApplicationMaster向ResourceManager注销自己,并允许属于它的container被收回。

提交任务的详情架构

6.Yarn的调度

1.FIFO Scheduler : 先进先出(先来后到的顺序)

先进先出:优先提交的,优先执行,后面提交的等待。(火车过隧道)。

2.Capacity Scheduler:容量调度

容量调度:允许看创建多个任务对列,多个任务对列可以同时执行。但是一个队列内部还是先进先出。CDH默认的调度器。

3. Fair Scheduler:公平调度

公平调度:第一个程序在启动时可以占用其他对列的资源(100%占用),当其他对列有任务提交时,占用资源的对列需要将资源还给该任务。还资源的时候,效率比较慢

7.容量调度案例

修改配置文件 capacity-scheduler.xml

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop

vim capacity-scheduler.xml

案例

├── prod 生产环境 40 %

└── dev 开发环境 60 %

├── mapreduce MR开发 50%

└── spark Spark开发 50%

<configuration> <property> <name>yarn.scheduler.capacity.root.queues</name> <value>prod,dev</value> </property> <property> <name>yarn.scheduler.capacity.root.dev.queues</name> <value>mapreduce,spark</value> </property> <property> <name>yarn.scheduler.capacity.root.prod.capacity</name> <value>40</value> </property> <property> <name>yarn.scheduler.capacity.root.dev.capacity</name> <value>60</value> </property> <property> <name>yarn.scheduler.capacity.root.dev.maximum-capacity</name> <value>75</value> </property> <property> <name>yarn.scheduler.capacity.root.dev.mapreduce.capacity</name> <value>50</value> </property> <property> <name>yarn.scheduler.capacity.root.dev.spark.capacity</name> <value>50</value> </property> </configuration> 

调用测试代码

hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar pi -D mapreduce.job.queuename=mapreduce 10 10

8.公平调度器

修改配置文件 yarn-site.xml

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop

vim yarn-site.xml

<!-- 指定使用fairScheduler的调度方式 --> <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value> </property> <!-- 指定配置文件路径 --> <property> <name>yarn.scheduler.fair.allocation.file</name> <value>/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/fair-scheduler.xml</value> </property> <!-- 是否启用资源抢占,如果启用,那么当该队列资源使用 yarn.scheduler.fair.preemption.cluster-utilization-threshold 这么多比例的时候,就从其他空闲队列抢占资源 --> <property> <name>yarn.scheduler.fair.preemption</name> <value>true</value> </property> <property> <name>yarn.scheduler.fair.preemption.cluster-utilization-threshold</name> <value>0.8f</value> </property> <!-- 默认提交到default队列 --> <property> <name>yarn.scheduler.fair.user-as-default-queue</name> <value>true</value> </property> <!-- 如果提交一个任务没有到任何的队列,是否允许创建一个新的队列,设置false不允许 --> <property> <name>yarn.scheduler.fair.allow-undeclared-pools</name> <value>false</value> </property> 

创建文件 fair-scheduler.xml

vim /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/fair-scheduler.xml

<?xml version="1.0"?> <allocations> <!-- users max running apps --> <userMaxAppsDefault>30</userMaxAppsDefault> <!-- 定义队列 --> <queue name="root"> <minResources>512mb,4vcores</minResources> <maxResources>102400mb,100vcores</maxResources> <maxRunningApps>100</maxRunningApps> <weight>1.0</weight> <schedulingMode>fair</schedulingMode> <aclSubmitApps> </aclSubmitApps> <aclAdministerApps> </aclAdministerApps> <queue name="default"> <minResources>512mb,4vcores</minResources> <maxResources>30720mb,30vcores</maxResources> <maxRunningApps>100</maxRunningApps> <schedulingMode>fair</schedulingMode> <weight>1.0</weight> <!-- 所有的任务如果不指定任务队列,都提交到default队列里面来 --> <aclSubmitApps>*</aclSubmitApps> </queue> <!-- weight 资源池权重 aclSubmitApps 允许提交任务的用户名和组; 格式为: 用户名 用户组 当有多个用户时候,格式为:用户名1,用户名2 用户名1所属组,用户名2所属组 aclAdministerApps 允许管理任务的用户名和组; 格式同上。 --> <queue name="hadoop"> <minResources>512mb,4vcores</minResources> <maxResources>20480mb,20vcores</maxResources> <maxRunningApps>100</maxRunningApps> <schedulingMode>fair</schedulingMode> <weight>2.0</weight> <aclSubmitApps>hadoop hadoop</aclSubmitApps> <aclAdministerApps>hadoop hadoop</aclAdministerApps> </queue> <queue name="develop"> <minResources>512mb,4vcores</minResources> <maxResources>20480mb,20vcores</maxResources> <maxRunningApps>100</maxRunningApps> <schedulingMode>fair</schedulingMode> <weight>1</weight> <aclSubmitApps>develop develop</aclSubmitApps> <aclAdministerApps>develop develop</aclAdministerApps> </queue> <queue name="test1"> <minResources>512mb,4vcores</minResources> <maxResources>20480mb,20vcores</maxResources> <maxRunningApps>100</maxRunningApps> <schedulingMode>fair</schedulingMode> <weight>1.5</weight> <aclSubmitApps>test1,hadoop,develop test1</aclSubmitApps> <aclAdministerApps>test1 group_businessC,supergroup</aclAdministerApps> </queue> </queue> </allocations> 

将修改好的这个文件分发到其他的集群的节点上

scp yarn-site.xml fair-scheduler.xml node02:$PWD

scp yarn-site.xml fair-scheduler.xml node03:$PWD

重启yarn

stop-yarn.sh

start-yarn.sh

创建相应的用户进行测试

useradd hadoop

passwd hadoop

groupadd supergroup

usermod -a -G supergroup hadoop 修改用户所属的附加群主

su – root -s /bin/bash -c “hdfs dfsadmin -refreshUserToGroupsMappings”

刷新用户组信息

测试

切换用户su hadoop

测试:

hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar pi 10 20

原文链接:https://blog.csdn.net/qq_43791724/article/details/104779311?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165277103516782350935879%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165277103516782350935879&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-26-104779311-null-null.nonecase&utm_term=%E8%B5%84%E6%BA%90

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
文明发言,共建和谐米科社区
提交
头像

昵称

取消
昵称表情图片