0 YARN中实体

  • 资源管理者(resource manager, RM)
    长时间运行的守护进程,负责管理集群上资源的使用

  • 节点管理者(node manager, NM)
    长时间运行的守护进程,在集群的所有节点上运行,负责监视容器

  • 容器(container)
    在受限的资源集合(内存、CPU等)下执行应用相关的进程

1 YARN应用

1.1 运行

(1) 客户端联系RM,请求运行应用master(application master, AM)进程。

(2) RM定位可用NM,并在NM上启动容器并在容器中加载AM。

AM启动后执行的事项依赖于应用,可以是在容器中执行计算并直接将结果返回给客户端,或者

(3) 向RM请求更多的容器。

(4) 组织、安排、启动容器,执行分布式计算。

1.2 资源请求

申请一些容器的资源请求可以制定每个容器上所需的计算资源,包括内存、CPU等,同时也可以指定容器所需满足的局部性约束。

局部性是保证在执行分布式数据处理算法时带宽高效利用的关键。

YARN应用任意时刻均可以执行资源请求。Spark采用预先申请固定数量的资源方式,而MapReduce在map阶段预先申请固定数量的资源,在reduce阶段即时申请资源。

1.3 应用生命周期

YARN应用可以是短时的(几秒钟),也可以是长时间运行的(几天甚至几个月)。

将用户运行的作业(job)映射为应用的方式:

(1) 为每个用户作业运行一个应用,MapReduce采用的方式;

(2) 为每个工作流或用户会话作业运行一个应用,Spark采用这种方式;

(3) 运行单个长时间运行的应用,被不同的用户作业共享,Apache Slider、Impala采用这种方式。

1.4 构建YARN应用

YARN项目中distributed shell应用可以作为如何编写YARN应用的示例。

一些项目可用于简化YARN应用的开发,如Apache Slider、Apache Twill等。

2 YARN中的调度

2.1 可用调度选项

YARN中有三类调度器可用:FIFO、Capacity和Fair。

运行一个长时间作业和一个段时间作业时各调度器的集群利用率比较图:

FIFO

FIFO调度器将应用存放在队列中,按应用提交的顺序执行应用。

队列头的应用申请的资源被首先分配,待其执行完毕后,下一个应用申请的资源被分配。

Capacity

Capacity调度器开辟出为小作业使用的专用队列。

Fair

Fair调度器在所有运行作业之间动态平衡资源分配。

2.2 Capacity调度器

Capacity调度器调度器允许在组织结构内共享Hadoop集群资源,每个组织部门占用整个集群资源的固定一部分。

Capacity调度器支持队列弹性(queue elasticity),运行作业申请的资源查过预先指定的队列容量、且其他队列中有闲置的容量,可以申请成功;Capacity调度器不支持抢占(preempt),在占有当前队列容量的容器结束后返回资源后这部分容量才可用。

Capacity调度器使用的配置文件为capacity-scheduler.xml。Capacity调度器完整的说明和配置项见Hadoop: Capacity Scheduler.

为应用选择队列依赖与应用。在MapReduce中,可以设置属性mapreduce.job.queuename指定为期望使用的队列名称,该属性未配置时,使用默认队列default

一个配置示例

队列层次:

root
    ├── dev
    │   ├── eng
    │   └── science
    └── prod

capacity-scheduler.xml:

<configuration>

    <!-- 指定子队列 -->
    <property>
        <name>yarn.scheduler.capacity.root.queues</name>
        <value>prod,dev</value>
    </property>

    <!-- 指定子队列dev的子队列 -->
    <property>
        <name>yarn.scheduler.capacity.root.dev.queues</name>
        <value>eng,science</value>
    </property>

    <!-- 指定子队列prod的容量 -->
    <property>
        <name>yarn.scheduler.capacity.root.prod.capacity</name>
        <value>40</value>
    </property>

    <!-- 指定子队列dev的容量 -->
    <property>
        <name>yarn.scheduler.capacity.root.dev.capacity</name>
        <value>10000</value>
    </property>

    <!-- 指定子队列dev的最大容量 -->
    <property>
        <name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
        <value>75</value>
    </property>

    <!-- 指定子队列dev.eng的容量 -->
    <property>
        <name>yarn.scheduler.capacity.root.dev.eng.capacity</name>
        <value>50</value>
    </property>

    <!-- 指定子队列dev.science的容量 -->
    <property>
        <name>yarn.scheduler.capacity.root.dev.science.capacity</name>
        <value>50</value>
    </property>

</configuration>

2.3 Fair调度器

Fair调度器在所有运行应用之间动态平衡资源分配。

激活Fair调度器的方式是在yarn-site.xml中定义:

<property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>

Fair调度器的配置文件为分配文件fair-scheduler.xml,该文件的名称可以使用yarn.scheduler.fair.allocation.file属性配置修改。

一个配置示例

Fair调度器完整的说明和配置项见Hadoop: Fair Scheduler

队列层次与上一节中队列层次相同,

fair-scheduler.xml:

<allocations>

    <!-- 指定默认的队列调度策略 -->
    <defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>

    <!-- 子队列prod -->
    <queue name="prod">
        <weight>40</weight><!-- 队列权重 -->
        <schedulingPolicy>fifo</schedulingPolicy><!-- 队列中调度策略 -->
    </queue>

    <!-- 子队列dev -->
    <queue name="dev">
        <weight>60</weight>

        <!-- 指定子队列eng和science -->
        <queue name="eng" />
        <queue name="science" />
    </queue>

    <!-- 应用放置到各队列的策略 -->
    <queuePlacementPolicy>
        <rule name="specified" create="false"/><!-- 应用中指定了队列 -->
        <rule name="primaryGroup" create="false" /><!-- 与用户所属UNIX组名称相同的队列 -->
        <rule name="default" queue="dev.eng"/><!-- 默认行为 -->
    </queuePlacementPolicy>

</allocations>

Fair调度器也可以指定队列层次,每个队列可以采用不同的调度策略。

Fair调度器使用一个基于规则的系统,以确定如何将应用放置在队列中。

Fair调度器支持抢占(preemption)。抢占允许调度器直接杀死使用了超出其公平共享资源的队列中的容器,以保证其他队列能够获取公平共享的资源。

Hadoop YARN 100-1知识点的更多相关文章

  1. Hadoop Yarn内存资源隔离实现原理——基于线程监控的内存隔离方案

    注:本文以hadoop-2.5.0-cdh5.3.2为例进行说明.   Hadoop Yarn的资源隔离是指为运行着不同任务的“Container”提供可独立使用的计算资源,以避免它们之间相互干扰.目 ...

  2. 二十六、Hadoop学习笔记————Hadoop Yarn的简介复习

    1. 介绍 YARN(Yet Another Resource Negotiator)是一个通用的资源管理平台,可为各类计算框架提供资源的管理和调度. 之前有提到过,Yarn主要是为了减轻Hadoop ...

  3. hadoop+yarn+hbase+storm+kafka+spark+zookeeper)高可用集群详细配置

    配置 hadoop+yarn+hbase+storm+kafka+spark+zookeeper 高可用集群,同时安装相关组建:JDK,MySQL,Hive,Flume 文章目录 环境介绍 节点介绍 ...

  4. Hadoop YARN:调度性能优化实践(转)

    https://tech.meituan.com/2019/08/01/hadoop-yarn-scheduling-performance-optimization-practice.html 文章 ...

  5. Hadoop Yarn REST API未授权漏洞利用

    Hadoop Yarn REST API未授权漏洞利用 Hadoop是一个由Apache基金会所开发的分布式系统基础架构,YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一 ...

  6. hadoop yarn running beyond physical memory used

    老是报物理内存越界,kill container,然后把yarn.scheduler.minimum-allocation-mb设成2048就好了 跟这个yarn.nodemanager.pmem-c ...

  7. Hadoop YARN配置参数剖析—RM与NM相关参数

    注意,配置这些参数前,应充分理解这几个参数的含义,以防止误配给集群带来的隐患.另外,这些参数均需要在yarn-site.xml中配置. 1.    ResourceManager相关配置参数 (1) ...

  8. hadoop错误org.apache.hadoop.yarn.exceptions.YarnException Unauthorized request to start container

    错误: 14/04/29 02:45:07 INFO mapreduce.Job: Job job_1398704073313_0021 failed with state FAILED due to ...

  9. hadoop Yarn 编程API

    客户端编程库: 所在jar包: org.apache.hadoop.yarn.client.YarnClient 使用方法: 1 定义一个YarnClient实例: private YarnClien ...

随机推荐

  1. nginx 页面乱码问题

    在配置nginx时常常遇到网页乱码的问题如图: 这时需要在server段里面添加两行: default_type 'text/html'; charset utf-8; 然后执行测试  重启操作 ng ...

  2. Bootstrap<基础二十四> 缩略图

    Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...

  3. Bootstrap <基础七>按钮

    任何带有 class .btn 的元素都会继承圆角灰色按钮的默认外观.但是 Bootstrap 提供了一些选项来定义按钮的样式,具体如下表所示: 以下样式可用于<a>, <butto ...

  4. linux学习之九 学习过程总结

    ~写在前面 首先非常感谢孟老师的悉心讲解,使用这种新颖的教学方式(MOOC课堂+博客),也感到非常有幸随着老师的思路对linux的内核进行了初步的系统学习.结合代码和gdb调试工具跟踪分析对linux ...

  5. iOS 8 TabBar 图片显示真实颜色

    “展信颜开” 我怎么想到这个词了呢……因为这个足以表达我现在的心情,有解决了一个问题,有了一个收获. 早上小伙伴问我“用自带的tab改图的颜色他会不显示?改tabitem.”我记得是可以显示的,但是他 ...

  6. 怎么利用javascript删除字符串中的最后一个字符呢?

    程序员就是每天在各种代码下不停的调试,世界买家网最近遇到了烦心事,是什么事情呢? 需求是一个字符串,想删除这个字符串最后一个字符,比如“1,2,3,4,5,”,删除最后一个“,”用javascript ...

  7. liunx 下 部署并运行java项目(非web)

    1. 将这三个包上传到liunx上,之后写一个run.sh 的脚本文件,然后在lib包中上传包<sunjce-provider.jar>包. 2.启动run.sh( ./run.sh st ...

  8. C#和Java在重写上的区别

    C# class A { public string Get1() { return "A1"; } public virtual string Get2() { return & ...

  9. beacon帧

    1.MAC头部 解释: ① Version 版本号  目前为止802.11只有一个版本,所以协议编号为0 ② Type 00表示管理帧,01表示控制帧,10表示数据帧 ③ Subtype 和Type一 ...

  10. [Python学习笔记1]Python语言基础 数学运算符 字符串 列表

    这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...