最近在研究如何为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

参考资料:

linux container框架,理解和配置LinuxContainerExecutor相关推荐

  1. Linux Container(lxc)分析和配置使用

    前提 本文翻译(有道翻译)自linux-container-lxc,根据重点摘录学习. 介绍 最好将容器化定义为:通过操作系统中的特性启用的进程隔离机制. 容器是与系统其他部分隔离的一个或多个进程的集 ...

  2. Linux内核深入理解定时器和时间管理(5):clockevents 框架

    Linux内核深入理解定时器和时间管理 clockevents 框架 rtoax 2021年3月 在原文基础上,增加5.10.13内核源码相关内容. 1. Introduction to the cl ...

  3. Linux内核深入理解定时器和时间管理(3):tick 广播 框架 和 dyntick

    Linux内核深入理解定时器和时间管理 tick 广播 框架 和 dyntick rtoax 2021年3月 在原文基础上,增加5.10.13内核源码相关内容. 结构体 --------------- ...

  4. Linux内核深入理解定时器和时间管理(2):clocksource 框架

    Linux内核深入理解定时器和时间管理 clocksource 框架 rtoax 2021年3月 在原文基础上,增加5.10.13内核源码相关内容. 全局部变量 ------------------- ...

  5. linux网桥的简单理解和配置

    linux网桥的简单理解和配置 Linux网桥是linux虚拟网络设备之一.网上很多分析linux网桥的文章,例如代码层面的分析.这里不牵扯复杂的分析和配置,主要是面向虚拟机链接一个用途,小白我的备忘 ...

  6. Tomcat是什么:Tomcat与Java技、Tomcat与Web应用以及Tomcat基本框架及相关配置

    1.Tomcat是什么        Apache Tomcat是由Apache Software Foundation(ASF)开发的一个开源Java WEB应用服务器. 类似功能的还有:Jetty ...

  7. linux加密框架 crypto 算法管理 - 哈希算法应用实例

    参考链接 Linux加密框架应用示例(二)_家有一希的博客-CSDN博客 linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程_CHYabc123456hh的博客-CSDN博 ...

  8. Linux DMA 框架介绍,demengine.c文件

    Linux DMA 框架介绍(demengine.c) 1.介绍 从我们的直观感受来说,DMA并不是一个复杂的东西,要做的事情也很单纯直白.因此Linux kernel对它的抽象和实现,也应该简洁.易 ...

  9. Tomcat(一) Tomcat是什么:Tomcat与Java技术 Tomcat与Web应用 以及 Tomcat基本框架及相关配置

    Tomcat(一) Tomcat是什么: Tomcat与Java技术 Tomcat与Web应用 以及 Tomcat基本框架及相关配置 Tomcat是一个被广泛使用的Java WEB应用服务器,我们有必 ...

最新文章

  1. Redis、Kafka 和 Pulsar 消息队列对比
  2. Resource punkt not found.nltk.download()下载失败
  3. 《深入浅出数据分析》第十章第十一章
  4. P3901-数列找不同【模拟】
  5. C语言程序设计基础讲座之指针的慨念
  6. 关于开发入门的一些事儿
  7. Lei Jun‘s first response to the
  8. Python中 文件处理
  9. 动态绑定OnClientClick的值
  10. 设备商网管软件定制开发案例分析
  11. 优秀网页翻译:关于您的下一个汽车友好型原型
  12. 转 - DataGuard中如何配置LOG_ARCHIVE_DEST_n参数
  13. 被遗忘权_继续–被遗忘的声明
  14. Linux下通过开源软件fail2ban进行远程登录防护
  15. 新颖的自我介绍_精选简单新颖的自我介绍
  16. AJAX框架简笔画风景简单,好看简单的简笔画风景
  17. jzoj 1006: 【入门】求商数和余数
  18. Office2007打开word和excel文件速度慢,在两个打开的word文件之间切换的速度慢,如何处理?...
  19. 【转】Actionscript,AS3,MXML,Flex,Flex Builder,Flash Builder,Flash,AIR,Flash Player之关系
  20. pdb、dmp调试文件

热门文章

  1. Solr入门——安装
  2. 全局变量局部变量ScriptCase中的全局变量、局部变量
  3. Linux下Redis的安装、配置操作说明
  4. oracle中asmcmd,ASM工具asmcmd
  5. java多张图片合成一张_1分钟学会“全景照片”拍摄技巧,从单反拍摄到PS合成,收藏备用...
  6. python for循环n次_Python入门10 —— for循环
  7. python小技巧积累--题库(持续更新)
  8. python安装gz文件_python tar.gz怎么安装-问答-阿里云开发者社区-阿里云
  9. ruby array_Ruby中带有示例的Array.delete_if方法
  10. 一文汇总 JDK 5 到 JDK 15 中的牛逼功能!