yarn的工作流程与配置

首先,说明container的概念,Container的一些基本概念如下:


  (1) Container是YARN中资源的抽象,它封装了某个节点上一定量的资源(CPU和内存两类资源)。它跟Linux Container没有任何关系,仅仅是YARN提出的一个概念(从实现上看,可看做一个可序列化/反序列化的Java类)。

  (2) Container由ApplicationMaster向ResourceManager申请的,由ResouceManager中的资源调度器异步分配给ApplicationMaster;

  (3) Container的运行是由ApplicationMaster向资源所在的NodeManager发起的,Container运行时需提供内部执行的任务命令(可以使任何命令,比如java、Python、C++进程启动命令均可)以及该命令执行所需的环境变量和外部资源(比如词典文件、可执行文件、jar包等)。

另外,一个应用程序所需的Container分为两大类,如下:

  (1) 运行ApplicationMaster的Container:这是由ResourceManager(向内部的资源调度器)申请和启动的,用户提交应用程序时,可指定唯一的ApplicationMaster所需的资源;

  (2) 运行各类任务的Container:这是由ApplicationMaster向ResourceManager申请的,并由ApplicationMaster与NodeManager通信以启动之。


其次说明yarn中,container的配置,主要包括两个方面的配置.

1. 一个节点提供给ResourceManager的资源,包括CPU和内存。

  a.通过yarn.nodemanager.resource.memory-mb来设定该节点提供的总的内存数量。其默认值是8G,该值可以大于系统的实际内存(一般不推荐,具体原因下面详细解释)。

  b. 通过yarn.nodemanager.resource.cpu-vcores来设定该节点提供的虚拟CPU数量。其默认值是8,该值可以大于系统的实际核心数量。


2. 每个container所占的ResourceManager中的最小资源(注意不是系统资源)。

  a.通过yarn.scheduler.minimum-allocation-mb来设定一个container所占的最小ResourceManager中的资源(注意这里不是系统资源,一个container所占用的系统资源是根据其运行的程序和启动的程序的命令决定,这也是为什么节点提供给ResourceManager的资源可以大于系统本身资源)。

  b. 通过yarn.scheduler.minimum-allocation-vcores来设定一个container所占的最小ResourceManager中的资源。


最后,yarn工作流程如下:

当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序:第一个阶段是启动ApplicationMaster;第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。YARN的工作流程分为以下几个步骤:

  步骤1 用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

  步骤2 ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。

  步骤3 ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。

  步骤4 ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

  步骤5 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。

  步骤6 NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

  步骤7 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。

在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。

  步骤8 应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。


这里有几点需要说明:

  1.  步骤6中,可能会因为系统资源不足无法启动任务(因为yarn.nodemanager.resource.memory-mb设定比系统资源大,此时,节点会返回container分配失败。而这个过程可能占用大量的时间)。

  2.  每个container的申请、释放,每个任务环境的准备都有开销。因此,应用程序的任务数量不宜太多


参考文章:

1. http://book.51cto.com/art/201312/422028.htm

2. http://dongxicheng.org/mapreduce-nextgen/understand-yarn-container-concept/








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值