Apache Hadoop YARN
1.Yarn通俗介绍
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统和调度平台
,可为上层应用提供统一的资源管理和调度。
Yarn特点:支持多个数据计算框架,运行成本低,数据共享。
Yarn的意义:
降低了企业的硬件开销(硬件成本),降低资源浪费,运行成本低,数据共享。
Yarn的内部组成
1、ResourceManager 一个集群资源的管理者
2、NodeManager 一个节点的资源管理者
3、ApplicationMaster 一个计算任务的管理者,每个计算任务都有一个APPMaster
4、Container 容器,包含内存与cpu
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被收回。
详细流程:
Yarn得调度器
1、FIFO Scheduler: 先进先出,谁先提交谁先执行(先来后到)。
2、Capacity Scheduler:容量调度器。以列得形式配置集群资源,每个队列可以抢占其他队列得资源。多个队列可以同时执行任务。但是一个队列内部还是FIFO
3、Fair Scheduler 公平调度器,同样以列得形式配置集群资源,每个队列可以抢占其他队列得资源。当被抢占得队列有任务时,抢占得队列奉还资源。不知指出在与奉还资源需要一段时间。
FiFo举例子
排队食堂打饭、排队买车票、医院挂号
容量调度器举例子
多窗口买火车票、多窗口排队食堂打饭、多窗口银行柜台办理业务、高速收费口
公平调度器
军人优先买车票、公交车老人坐
Capacity Scheduler(CDH默认的调度器)
Root
├── prod(生产环境) 40 %
└── dev(开发环境) 60 %
├── mapreduce 60 %的50%
└── spark 60 % 的50%
1、编辑集群内的capacity-scheduler.xml 配置文件,输入一下内容
<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>
2、将更新的配置分发到集群所有的节点
scp capacity-scheduler.xml node02:/ P W D s c p c a p a c i t y − s c h e d u l e r . x m l n o d e 03 : / PWD scp capacity-scheduler.xml node03:/ PWDscpcapacity