前面我们简单介绍了Hadoop资源管控简介,提到了目录的空间大小,目录文件个数,yarn任务内存等等资源的管控,如果我们想要对cpu进行控制就需要用到linux系统本身的cgroup。这时候就需要设置Yarn的Container Executor了。
1. 说明
安全模式集群中的YARN containers使用系统工具为容器提供执行隔离。保证容器在job所有者的证书认证下执行,操作系统强制对容器进行访问限制,同时容器只能用于提交application。
安全容器只能在拥有安全认证的yarn集群中使用。
YARN提供了三种ContainerExecutor,通过属性yarn.nodemanager.container-executor.class配置:
- DefaultContainerExecutor,简称DCE。每个Container运行在单独的进程里,但进程都是由NM的用户启动的。比如NM进程是用yarn用户启动的,那么所有Container的进程也由yarn用户启动。
- LinuxContainerExecutor,简称LCE。每个Container由不同的用户启动。比如A用户提交的job的container,都由A用户启动。此外支持cgroup、支持单独的配置文件、支持简单的ACL。
- Windows Secure Container Executor,简称WSCE。
2. 配置
这里只介绍LinuxContainerExecutor的配置。
编辑配置文件yarn-site.xml,添加LinuxContainerExecutor
<property>
<name>yarn.nodemanager.container-executor.class</name>
<value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>
</property>
<property>
<name>yarn.nodemanager.linux-container-executor.group</name>
<value>hadoop</value>
</property>
<!--此处的group为nodemanager用户所属组-->
编辑container-executor.cfg 添加如下内容:
#configured value of yarn.nodemanager.linux-container-executor.group
yarn.nodemanager.linux-container-executor.group=hadoop
#comma separated list of users who can not run applications
banned.users=azkaban
#comma separated list of allowed system users
allowed.system.users=root
#Prevent other super-users
min.user.id=1000
注: container-executor.cfg配置文件有很多坑,例如每一个配置项末尾都不能有空格,文件不能以CRLF 换行,banned.users=不能为空等,编辑时需注意。
修改bin/container-executor权限
container-executor的owner必须是root,而且必须与nodemanager用户同组$chown root:hadoop container-executor
$chmod 6050 container-executor
测试 container-executor
[root@datanode-2 bin]# ./container-executor
Usage: container-executor --checksetup
Usage: container-executor --mount-cgroups hierarchy controller=path...
Usage: container-executor user yarn-user command command-args
Commands:
initialize container: 0 appid tokens nm-local-dirs nm-log-dirs cmd app...
launch container: 1 appid containerid workdir container-script tokens pidfile nm-local-dirs nm-log-dirs resources
signal container: 2 container-pid signal
delete as user: 3 relative-path
重启nodemanager
3. 注意事项
container-executor和container-executor.cfg 及其所有父目录的owner都必须是root.
4. 参考链接
http://hadoop.apache.org/docs/r2.7.6/hadoop-yarn/hadoop-yarn-site/SecureContainer.html
http://secfree.github.io/blog/2015/06/25/yarn-container-executor-traps.html