在新版本的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。
1 | mvn package -Pdist,native -DskipTests -Dtar -Dcontainer-executor.conf.dir=/etc |
编译完成后,就可以检查是否成功了
1 | 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能使用的核数为
1 | yarnProcessors = nodeCpuPercentage * numProcessors = 0.8 * 4 = 3.2 |
CPU shares为
1 | cpuShares = CPU_DEFAULT_WEIGHT * containerVCores = 1024 * 1 |
其中CPU_DEFAULT_WEIGHT=1024代表一个CPU时间
即containers能使用的核数量为3.2个,然后通过公式:
1 | containerCPU = (containerVCores * yarnProcessors) / nodeVCores |
注: nodeVCore为配置NM的核数为4,containerVCores为应用为每个container申请的核数
即按照上面的公式得到containerCPU为13.2除以4=0.8,然后根据quotaUS = periodUS * containerCPU,即10001000*0.8得到800000,即cpu.cfs_quota_us的值,即该进程使用的CPU不会超过80%,当应用申请的container核数为2时,得到shares为2048,意味着其将会获得比1024多2倍的CPU时间,由此类推。
参考资料