纱实现原理之CPU管理

纱实现原理之CPU管理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

纱中对于CPU的管理使用了CGroup方案,即使用CGroup来对纱线中容器的计算能力进行管理.RM中的调度器根据我的资源请求分配相应数量资源的容器,主要包括内存和CPU两种资源,CPU的分配与内存的分配过程是一样的,具体调度过程见另一篇文章。本文着重讲解容器中CPU的管理。

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

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

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

纱实现原理之CPU管理

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

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

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

纱实现原理之CPU管理

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

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

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

纱实现原理之CPU管理

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

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

纱实现原理之CPU管理

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

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

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

纱实现原理之CPU管理

纱实现原理之CPU管理

这里涉及到了几个参数:

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

纱实现原理之CPU管理

纱实现原理之CPU管理

纱实现原理之CPU管理