linux container框架,理解和配置LinuxContainerExecutor

最近在研究如何为Hadoop开启基于Kerberos的安全配置,经过千辛万苦配置好后本以为到了见证奇迹的时刻,但是卡在NodeManger无法启动,折磨的死去活来。经历了各种百度、google后依然无果,最终还是乖乖的回来细读Hadoop官方配置文档,竟然发现关于LinuxContainerExecutor配置的非常详细的讲解。为了不让学习的成果随记忆消散,因此在这儿总结并分享出来。

理解ContainerExector

Hadoop集群启用安全后,NodeManager无法启动的根本原因是LinuxContainerExecutor没有正确配置。ContainerExecutor 被Yarn框架使用,它定义了容器如何装载和控制。在Hadoop YARN中包含两种ContainerExecutor:

DefaultContainerExecutor: 这是默认的执行器,由Yarn用来管理容器执行。在该模式下容器进程使用和NodeManager相同的Unix用户运行容器。

LinuxContainerExecutor: 这个执行器仅在GNU/Linux上支持。在安全状态启用时,这个执行器以提交应用的YARN用户运行容器,在非安全状态时以特定用户执行(默认是nobody)。在安全状态启用时,这个执行器需要所有的用户账户在容器启动的集群节点被创建。它会用到包含在Hadoop部署包中的setuid可执行工具,NodeManager使用这个工具来启动和kill掉容器。为了最大化安全,executor安装限制本地文件和被容器使用目录(如共享对象,jars,中间文件,日志文件等等)的权限和用户/组所属权。特别需要注意的一点,正是因为此,除了应用所有者和NodeManager外,不该有其它用户能访问任何上述本地文件或目录

编译可执行文件

如果你的环境中安装了maven,那可以参照官方帮助中的编译方法:

1mvn package -Dcontainer-executor.conf.dir=/etc/

参数-Dcontainer-executor.conf.dir传入的路径应该是集群节点上放置配置文件的路径,保证setuid可执行文件能定位到。可执行文件应该安装在$HADOOP_YARN_HOME/bin目录下。

为了方便大家使用,我在这里提供编译好的container-executor,配置文件路径指向/etc/container-executor.cfg, container-executor拷贝到Hadoop bin 目录下。

1[root@hadoop01 bin]# cp container-executor /home/hadoop/hadoop-2.8/bin/

分配可执行文件权限

1

2[root@hadoop01 bin]# chown root:hadoop /home/hadoop/hadoop-2.8/bin/container-executor

[root@hadoop01 bin]# chmod 6050 /home/hadoop/hadoop-2.8/bin/container-executor

这里的组hadoop是NodeManager Unix用户(yarn)所属的组,并且组内没有非hadoop相关的用户,以防安全风险。这个组名需要在yarn-site.xml和container-executor.cfg中都配置,

配置yarn-site.xml

1

2

3

4

5

6

7

8

9

10

11

12

yarn.nodemanager.container-executor.class

org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor

yarn.nodemanager.linux-container-executor.path

/home/hadoop/hadoop-2.8/bin/container-executor

yarn.nodemanager.linux-container-executor.group

hadoop

分配本地目录权限

LinuxTaskController还需要在container-executor.cfg中配置的yarn.nodemanager.local-dirs和yarn.nodemanager.log-dirs路径被赋予755权限。设置如下:

1

2

3

4

5

6[root@hadoop01 ~]# mkdir -p /hadoop/yarn/local

[root@hadoop01 ~]# mkdir -p /hadoop/yarn/log

[root@hadoop01 yarn]# chown yarn:hadoop /hadoop/yarn/local

[root@hadoop01 yarn]# chown yarn:hadoop /hadoop/yarn/log

[root@hadoop01 yarn]# chmod 755 /hadoop/yarn/local

[root@hadoop01 yarn]# chmod 755 /hadoop/yarn/log

配置container-executor.cfg文件

为配置文件添加配置项

1

2

3

4

5

6[root@hadoop01 ~]# vim /home/hadoop/hadoop-2.8/etc/hadoop/container-executor.cfg

yarn.nodemanager.local-dirs=/hadoop/yarn/local

yarn.nodemanager.log-dirs=/hadoop/yarn/log

yarn.nodemanager.linux-container-executor.group=hadoop

banned.users=hdfs,yarn,mapred,bin

min.user.id=1000

拷贝配置文件

配置文件container-executor.cfg需要拷贝到之前编译可执行文件中指定的/etc/目录下,以便能被可执行文件访问到。

1[root@hadoop01 ~]# cp /home/hadoop/hadoop-2.8/etc/hadoop/container-executor.cfg /etc/

为配置文件设置权属并分配权限

配置文件目录需要运行在root用户,hadoop组,并且赋予0400权限,配置如下:

1

2[root@hadoop01 ~]# chown root:hadoop /etc/container-executor.cfg

[root@hadoop01 ~]# chmod 400 /etc/container-executor.cfg

必须如此配置,因为可执行程序逻辑会检测这些权限,否则NodeManager会启动失败。

最后,再总结下所有涉及目录的权限和权属分配表,以保证你做对了,任意一项都要严格遵守配置。

Filesystem

Path

User:Group

Permissions

local

container-executor

root:hadoop

--Sr-s--*

local

conf/container-executor.cfg

root:hadoop

r-------*

local

yarn.nodemanager.local-dirs

yarn:hadoop

drwxr-xr-x

local

yarn.nodemanager.log-dirs

yarn:hadoop

drwxr-xr-x

配置文件的坑

经过了上述审慎配置后,检查了无数遍,依然无法运行nodeManager,始终报如下错误:

Caused by: org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.privileged.PrivilegedOperationException: ExitCodeException exitCode=24: Can’t get group information for hadoop - Success.

问题的原因是hadoop编码不够严谨,如果.cfg中group组配置中存在空格,就会始终报检测不到组的错误。这个解决方案借鉴了secfree的博客,文章写的非常赞,完美解决这个问题。

检测错误,运行:

1

2[root@hadoop01 bin]# ./container-executor --checksetup

Can't get group information for hadoop - Success

修复错误:

1

2

3

4

5

6

7

8[root@hadoop02 etc]# chmod 777 container-executor.cfg

[root@hadoop02 etc]# vim container-executor.cfg

yarn.nodemanager.local-dirs=/hadoop/yarn/local

yarn.nodemanager.log-dirs=/hadoop/yarn/log

yarn.nodemanager.linux-container-executor.group=hadoop

banned.users=hdfs,yarn,mapred,bin

min.user.id=1000

[root@hadoop02 etc]# chmod 0400 container-executor.cfg

如果参照上述修改后,发现又有新错误出现,例如:

1

2

3[root@hadoop03 etc]# /home/hadoop/hadoop-2.8/bin/container-executor --checksetup

configuration tokenization failed

Can't get configured value for yarn.nodemanager.linux-container-executor.group.

需要再回头检查.cfg文件的配置,可以通过cat命令检查:

1

2

3

4

5

6

7[root@hadoop03 etc]# cat container-executor.cfg

yarn.nodemanager.local-dirs=/hadoop/yarn/local

yarn.nodemanager.log-dirs=/hadoop/yarn/log

yarn.nodemanager.linux-container-executor.group=hadoop

banned.users=hdfs,yarn,mapred,bin

min.user.id=1000

~

可以看到在.cfg文件的末尾多了一个“~”号,这是导致错误的原因,重新修订.cfg文件,确保最后看到的结果如下:

1

2

3

4

5

6[root@hadoop03 etc]# cat container-executor.cfg

yarn.nodemanager.local-dirs=/hadoop/yarn/local

yarn.nodemanager.log-dirs=/hadoop/yarn/log

yarn.nodemanager.linux-container-executor.group=hadoop

banned.users=hdfs,yarn,mapred,bin

min.user.id=1000

参考资料:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值