在新版本的hadoop中,配置linux container已经不需要在每台机器上新建用户了,让使用变得更加灵活,之前我用的是2.2版本,详细的看官网,2.7.1的配置在这里,具体配置就不多说了

secure container

对于配置的权限,还是会有要求,container-executor.cfg文件需要root权限,和其父目录等向上拥有者为root,所以,可以把改文件放置到/etc/目录下满足其要求,同时方便配置同步管理,然而,container-executor的默认读取路径是$HADOOP_HOME/etc/hadoop/目录下,所以我们需要传入指定路径去重新编译container-executor,该文件权限可以设置为6050。

mvn package -Pdist,native -DskipTests -Dtar -Dcontainer-executor.conf.dir=/etc

编译完成后,就可以检查是否成功了

strings container-executor | grep etc

关于Cgroup

要开启该功能,在新机器中要确保安装开启和内核支持该功能

在yarn配置了CGroup的模式下,它是通过cpu.cfs_period_us,cpu.cfs_quota_us,cpu.shares来对container进行CPU的资源控制。

举个例子:

假设我们设置yarn.nodemanager.resource.percentage-physical-cpu-limit参数为80和yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage参数为true(假设测试虚拟机的核数为4),在该模式下所有container能使用的核数为

yarnProcessors = nodeCpuPercentage * numProcessors = 0.8 * 4 = 3.2

CPU shares为

cpuShares = CPU_DEFAULT_WEIGHT * containerVCores = 1024 * 1

其中CPU_DEFAULT_WEIGHT=1024代表一个CPU时间

即containers能使用的核数量为3.2个,然后通过公式:

containerCPU = (containerVCores * yarnProcessors) / nodeVCores

注: nodeVCore为配置NM的核数为4,containerVCores为应用为每个container申请的核数

即按照上面的公式得到containerCPU为1*3.2除以4=0.8,然后根据quotaUS = periodUS * containerCPU,即1000*1000*0.8得到800000,即cpu.cfs_quota_us的值,即该进程使用的CPU不会超过80%,当应用申请的container核数为2时,得到shares为2048,意味着其将会获得比1024多2倍的CPU时间,由此类推。

参考资料

用 cgroups 管理 cpu 资源