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

参考资料:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux更新命令centos,CentOS 7.0命令更新新版特性

查看系统版本信息#uname -a#cat /etc/redhat-release升级所有包,改变软件设置和系统设置,系统版本内核都升级#yum -y update升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变#yum -y upgradeCentOS7中主机名的配置文…

linux bash and,linux bash shell中for的用法and示例

关于linux bash shell中的for语句在linux中shell是必不可少的一部分,但是在bash shell中有while,for,until等循环命令,今天就介绍一下关于for的一些用法。文中任何错误希望大佬们一一指出,不胜感激。bash shell中提供了…

mac利用vscode运行c语言程序,Mac下使用VScode编译配置C/C++程序详细图文教程

在mac上有时候需要编写一些c 或者 c的代码,如果使用 xcode,有时候就显得很笨重,而且运行起来很不方便。而微软提供了一个跨平台的编辑器visual studio code ,这个编辑器很轻量级,而且插件超多,你几乎可以在这个编辑器里…

c语言简答程序源代码,C语言简答题答案

C语言变量的存储特性可分四类:自动型(auto)、静态型(static)、外部型(extern)和寄存器型(register)。Auto的特点:1. [auto] 类型标识符 变量列表;常常可以缺省auto。2. 函数内定义的局部变量、函数的形式参数和函数体内分程序的局部变量。3. …

c语言中 exit的标准是什么,C语言中exit();肿么用?

表示 关闭所有文件,终止正在执行的进程。exit(1)表示异常退出.这个1是返回给操作系统的。exit(x)(x不为0)都表示异常退出exit(0)表示正常退出exit()的参数会被传递给一些操作系统,包括UNIX,Linux,和MS DOS,以供其他程序使用。程序例子&#x…

五邑大学c语言期末考试题,五邑大学 c语言试卷.doc

五邑大学 c语言试卷.doc下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。2.下载的文档,不会出现我们的网址水印。3、该文档所得收入(下载内容预览)归上传者、原创作者&#x…

linux资源隔离是哪些,【转载】Linux cgroup资源隔离各个击破之

Linux cgroup 有两个子系统支持CPU隔离。一个是cpu子系统,另一个是cpuset子系统。cpu子系统根据进程设置的调度属性,选择对应的CPU资源调度方法.1. 完全公平调度 Completely Fair Scheduler (CFS)原理详见CFS用于处理以下几种进程调度策略SCHED_OTHERSCH…

14秋《c语言程序设计》作业2,《C语言程序设计》 作业参考答案.doc

作业参考答案一、单项选择1. B    2. D    3. B    4. D    5. B    6. B7. C    8. D    9. D 10.C 11.B 12&#…

华中科技大学c语言期末考试题,华中科技大学C语言期末考库剖析.docx

华中科技大学C语言期末考试题库试题及答案汇总1.设int a12,则执行完语句aa-a*a后,a的值是__D____。A、552 B、264 C、144 D、-264知识点:算术表达式2.以下变量x、y、z均为double类型且已正确赋值,不能正确表…

网页版bpc电波对时_科普向:无需联网却能自动对时的钟表

有一种神秘的钟表,它能够自动对时,却不需要联网,它十分准时,和传说中的的原子钟的误差也仅有几毫秒,它十分小众,却也随处可见,它就是电波表。今天猫头我就跟大家说说这个电波表。首先什么是电波…

动感灯箱制作流程培训_2000多年的灯箱发展史,你知道多少?

灯箱作为日常广告标识业务的重要板块,相信每个标识人都已经非常熟悉了,国内标识人也经常去学习相关新工艺新案例,但其实很多人不知道世界上最早的灯箱可能是中国人制作的哦~接下来就带大家一起揭开灯箱的前世今生,并详细盘点一下如…

c语言程序设计基础1千克,c语言学习知识编程经典编辑题汇总整编.doc

c语言学习知识编程经典编辑题汇总整编.doc - C语言编程基础习题汇总1.设计一个由键盘输入三个整数,求这三个数的平均数的程序。2.编写一个程序,用于水果店售货员结账。已知苹果每斤2.50元,鸭梨每斤1.80元,香蕉每斤2元,…

cp 过程中目录突然挂了_怎么解决管材激光切割机切管过程中出现的过烧及挂渣...

近年来,随着激光切割机的发展,不仅被用于切割平面板材,而且被应用于切割管材,我们称之为“管材激光切割机”。那么管材激光切割机用于切割管材时是否会出现问题呢,是的,确实出现了问题。由于管材的封闭性&a…

C语言填空题10道,3道C语言填空题,谁帮忙做下,谢谢

3道C语言填空题,谁帮忙做下,谢谢0功能:输出两个整数中大的那个数,两个整数由键盘输入。#include #include int main(){int a,b,*p1,*p2;p1(int *)malloc(sizeof(int));p2(int*)malloc(sizeof(int));scanf("%d%d",__(1)_…

大学计算机课程考试系统C语言题库,《大学计算机基础》考试题库(含答案).doc...

《大学计算机基础》试题题库及答案一、单选题练习 1.完整的计算机系统由( C )组成。A.运算器、控制器、存储器、输入设备和输出设备B.主机和外部设备C.硬件系统和软件系统D.主机箱、显示器、键盘、鼠标、打印机2&…

识别产品外观的合格软件_你还在犹豫?外观检测设备使用已成主流!

今天跟大伙聊一聊关于各种瓶子的外观检测/视觉检测。我们都知道,不管是瓶子、杯子还是其他的,在生产过程种对产品的质量检测这种有着超高重复性动作与随机应变能力的工作,在以前的工业时代,完全依靠人“人眼识别”人工检测来完成&…

go 调用c语言,golang之调用C语言代码

此篇教程只是简单的描述怎么使用以及遇到的一些错误我写的实例,C语言与golang在同一个文件中,并没有分开。我这里演示两个例子:⑴ 调用C语言函数打印“Hello World”#include void PrintHello(){ printf("Hello World!\n");}c代…

jsessionid每次请求都在变_为什么每次沟通都变争吵,学会这4条沟通原则,解决90%的沟通问题...

沟通重要吗?太重要了,可以这么说,我们在生活中遇到的绝大部分问题其实都是沟通问题。你的身边有这样的对话吗?老婆对丈夫说:“老娘当初瞎眼了才看上你,成天就知道打牌“妈妈对儿子说:”你看看人…

c语言long说明符,C语言-类型说明符 long,short,unsigned,signed

类型说明符基本概念C 语言提供了一下四种说明符,四个都属于关键字;short短型等价于 short intlong 长型 等价于 long intsigned 有符号型unsigned 无符号型这些说明符一般就是用来修饰 int 类型的,所以在使用时可以省略 intshort和 longshort 和 long 可以提供不同长度的整型数…

常见食物营养成分表图_营养成分表,你会看么?

中国居民对于营养标签的认知较低。一项针对中国五城市居民的调查显示,仅有40.54%的消费者会阅读营养标签。恭喜你成为其中之一。这是什么数据?营养成分表通常有三项主要内容,从左到右依次为营养素的名称、营养素的含量以及营养素参考值&#…