• [Hadoop]-Yarn-架构篇


    1.简述

      Yarn是Hadoop2.X的核心组件之一.负责集群的资源管理.(不局限于Hadoop,Spark等等相当多的组件都可以利用Yarn来进行资源管理与调度)

      Yarn本身由两大组件构成:ResourceManager(RM)和NodeManager(NM).在Yarn中,整个资源管理依靠这两大组件来共同完成.

      ResourceManager:

        ResourceManager负责整个集群的资源管理与分配.它本身再由两个组件构成

        应用程序管理器ApplicationManager

          ApplicationManager是RM的中心入口,负责管理整个集群的应用程序.包括应用程序的提交,与调度器协商资源,跟踪分配的Container,启动AppMaster,监控AppMaster执行状态,失败重启等等

        调度器(Scheduler)

          调度器根据根据队列,容量等等条件(比如每队最多分配多少,最多执行作业数多少),总体上将系统中的资源分配给各个应用程序.

          对于某一个应用程序,根据对该应用程序的请求进行资源分配.

          资源分配的最终结果是一个Container.

      NodeManager

        NodeManager是每个节点上的资源管理器和任务管理器.它会定时向RM汇报本节点的资源情况和各个Container的运行状态,并接收和实际处理来自ApplicationManager的Container启动&暂停命令

    2.核心概念

      2.1 Container与资源隔离

        Container,意义就像它的名字-容器.它是Yarn中对资源的一种抽象.它封装的是某个节点的多维度资源(内存,CPU,磁盘,网络等等),也是资源最终分配的结果与单位,

        Container作为容器的另一个概念就是资源隔离.

        资源隔离包含两层含义,即

          Container之内的运行使用资源的上限不会超过Container,

          Container之外的运行不会占用到Container之内的资源.

        Container资源隔离的实际操纵者,是Yarn的NM.它针对不同的资源,可以使用不同的隔离机制.具体见后

      2.2 ApplicationMaster

         ApplicationMaster是一种应用框架,这是Yarn跨越Hadoop可以作为很多框架的资源调度组件的基础.

          ApplicationMaster可以是任何编程语言编写的程序,它使用ProtocolBuf和ResourceManager.NodeManager进行交互.

          它实际负责向ResourceManager申请协调资源,并且与NodeManager协同工作完成对任务的执行,监控等等(跟踪应用程序状态重启失败任务).

          它的原生支持就是MR,但比如Spark,Storm等等很多都实现了自己的ApplicationMaster,所以才可以譬如SparkOnYarn.

    3.Yarn的工作流程

      1.向Yarn提交一个应用程序.(这个应用程序本身就会包含几个部分:用户程序,ApplicationMaster程序,以及启动ApplicationMaster的命令等)

      2.ResourceManager将会为这个应用程序分配第一个Container.并且会立即与这个Container所在的NodeManager通讯,要求以这个Container启动ApplicationMaster应用程序

      3.ApplicationMaster被启动后,会首先向ResourceManager注册,这个时候应用程序已经正式启动,可以通过ResourceManager查看应用程序状态了.

        之后ApplicationMaster将接管应用程序,负责与ResourceManager通讯为之后的各个任务申请资源,监控状态,重复以下4-7步骤直到整个任务结束

      4.ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请资源

      5.一旦申请到资源拿到Container,ApplicationMaster将会立即与Container所在的NodeManager通讯,要求它启动任务

      6.NodeManager为任务设置好运行环境(包括环境变量,Jar包,二进制程序等等),将任务启动写到一个脚本里,然后执行脚本启动任务

      7.各个任务通过RPC协议向ApplicationMaster汇报自己的状态和进度,以便ApplicationMaster随时重启某个任务

      8.任务全部结束后,ApplicationMaster向ResourceManager注销并关闭自己

    4.Yarn的资源隔离机制

      Yarn的资源都是指可供使用的资源,比如应该刨除操作系统本身占用,其它应用程序占用等,Yarn本身不会智能探测节点的资源

      4.1 内存隔离

        Yarn的内存隔离默认是采用线程监控是否超量.一旦发现超量会立即杀死任务.

          Java进程在创建之初内存会暴增然后迅速回复正常,所以采用线程监控会更加合适.Cgroups机制是任何时候都不得超量,这样很容易在进程启动之初被杀死

        Yarn的内存相关配置

          yarn.nodemanager.resource.memory-mb Yarn上可使用的物理内存,默认8192(MB),如果节点内存资源不足,则应酌情减少这个值(Yarn本身不会智能探测节点的内存总量)

          yarn.nodemanager.vmem-pmem-ratio 任务每使用1MB物理内存,则可以使用多少虚拟内存.默认2:1

          yarn.nodemanager.pmem-check-enabled 是否启动一个线程检查每个任务的物理内存使用量,如果超过分配值,则将其杀死.默认为true

          yarn.nodemanager.vmem-check-enabled 是否启动一个线程检查每个任务的虚拟内存使用量,如果超过分配至,则将其杀死,默认为true

          yarn.scheduler.minimum-allocation-mb 单个任务可申请的最少内存量,默认1024(MB)

          yarn.scheduler.maximum-allocation-mb 单个任务可申请的最大内存量,默认8192(MB)

      4.2 CPU隔离

        在Yarn中,因为考虑到不同的CPU的计算性能差别极大,CPU资源被重新定义了一个虚拟CPU的概念.对于高性能CPU,可以配置更高的虚拟CPU配比率.

        默认情况下,Yarn不会对CPU进行调度,需要使用专门的资源管理器

        Yarn的CPU相关配置

          yarn.nodemanager.resource.cpu-vcores 表示该节点可使用的虚拟CPU个数,默认为8,建议配置为物理核数,高性能CPU可以配置为2倍物理核数

          yarn.scheduler.minimum-allocation-vcores 单个任务申请的最少核数,默认为1

          yarn.scheduler.maximum-allocation-vcores 单个任务申请的最大核数,默认为32

        

  • 相关阅读:
    CSUST 8.4 早训
    CSUST 8.5 早训
    hdu1542 Atlantis 线段树--扫描线求面积并
    hdu1540 Tunnel Warfare 线段树/树状数组
    hdu1535 Invitation Cards 最短路
    hdu1358 Period KMP
    SQL Server 向数据库中创建表并添加数据
    初次实践数据库--SQL Server2016
    hdu1301 Jungle Roads 最小生成树
    hdu1281 棋盘游戏 二分图最大匹配
  • 原文地址:https://www.cnblogs.com/NightPxy/p/9214555.html
Copyright © 2020-2023  润新知