Yarn实现原理和管理是怎样的

发布时间:2021-11-15 17:41:35 作者:柒染
来源:亿速云 阅读:272

这篇文章给大家介绍Yarn实现原理和管理是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Yarn中对于CPU的管理使用了CGroup方案,即使用CGroup来对Yarn中Container的计算能力进行管理。RM中的调度器根据AM的资源请求分配相应数量资源的Container,主要包括内存和CPU两种资源,CPU的分配与内存的分配过程是一样的。小编着重讲解Container中CPU的管理。

Yarn中包含两类容器执行脚本,若想实现对CPU的控制,需要使用LinuxContainerExecutor.java来启动容器,默认的 DefaultContainerExecutor.java无法管理CPU,可以将配置文件中的yarn.nodemanager.Linux-Container-executor.resources-handler.class参数值设为org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler

LinuxContainerExecutor可以实现以容器所属用户的身份运行container,而默认的 DefaultContainerExecutor只能以普通管理员身份运行container。

首先我们需要关注配置文件中的两个参数,源码中配置文件的路径为hadoop-yarn-api\src\main\java\org\apache\hadoop\yarn\conf\YarnConfiguration.java

Yarn实现原理和管理是怎样的

第一个参数表示该节点上可以分配给容器使用的CPU核数,用vcores表示,默认为8,yarn中之所以采用虚拟CPU来表示,是为了消除不同CPU性能之间的差异,默认1个物理CPU对应一个虚拟CPU,需要手工设置。

第二个参数表示节点上的CPU可以分配给所有容器的使用时间比例,默认为100%,即所有CPU的计算能力全部供Yarn使用。

还有一个参数是用来限制是否允许在CPU空闲时,可以将多余的计算能力分配给其他进程使用,默认允许,若设为TRUE,则会严格按照资源限制控制容器的CPU使用时间,该参数如下:

Yarn实现原理和管理是怎样的

了解完几个主要参数后再来看一下容器的CPU使用是具体怎样控制的。

该控制逻辑代码在hadoop-yarn-server\hadoop-yarn-server-nodemanager\src\main\java\org\apache\hadoop\yarn\server\nodemanager\util\CgroupsLCEResourcesHandler.java文件中。

下面看一下几个关键的逻辑点:

Yarn实现原理和管理是怎样的

这两个方法会分别在容器启动前和容器执行完后进行调用,具体的调用过程是在hadoop-yarn-server\hadoop-yarn-server-nodemanager\src\main\java\org\apache\hadoop\yarn\server\nodemanager\LinuxContainerExecutor.java中的launchContainer方法中进行调用的。

第一个方法主要用来设置容器的CPU使用限额,具体实现在setupLimits方法中:

Yarn实现原理和管理是怎样的

这个方法首先获取Container中分配的虚拟CPU数量,接着创建CGroup的文件路径,即在CGroup路径中创建与CPU和容器名称相关的路径。在这个方法中可以看到有两种CPU的限制方式:

第一种是通过cpuShares参数,该参数其实就是依据容器中分配的虚拟CPU数量来计算使用时间的,比如容器A为1 vcores,容器B为2 vcores,则容器A和B在满负荷运行时可以使用的CPU配额为1:2,该配比是相对的,即若只有一个容器,则可以使用100%的CPU时间。这种方式在保证公平的情况下能更加充分利用资源。

第二种需要开启上述提到的cgroups.strict-resource-usage参数, 即设为TRUE,通过调用 getOverallLimits方法得到具体限额,然后将限额写入cfs_period_us和cfs_quota_us文件中,这种方式限制的是绝对使用时间,来看一下getOverallLimits方法:

Yarn实现原理和管理是怎样的

Yarn实现原理和管理是怎样的

这里涉及到了几个参数:

yarnProcessors:代表在某个节点上yarn中可使用的虚拟CPU数量, 最小不能低于0.01,该参数的值是通过在init方法中调用NodeManagerHardwareUtils.getContainersCores方法进行初始化的,即根据配置文件中设定的CPU分配比例来计算Yarn可用的CPU数量:

Yarn实现原理和管理是怎样的

Yarn实现原理和管理是怎样的

quotaUS:就是在一个时间周期内可使用的 cpu 时间。

periodUS:时间周期(每个cpu core)。

具体计算方式在getOverallLimits方法中:

quotaUS默认值为1000 * 1000,即1秒,periodUS默认值为(1000 * 1000/yarnProcessors)取整。

当yarnProcessors小于1时,quotaUS的值为 (periodUS * yarnProcessors)取整,但最小不能低于1000ms,periodUS的值为1000 * 1000,即1秒。

将这两个值返回并写入文件中。

当容器执行完毕时,会清理上面设置的CPU限额配置,具体实现在下面的方法中:

Yarn实现原理和管理是怎样的

关于Yarn实现原理和管理是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. yarn管理命令怎么用
  2. yarn和hdfs

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

yarn cpu

上一篇:Ubuntu20.04如何安装wxWidgets-3.1.3

下一篇:如何用python实现简单的文本情感分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》