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
參考資料:
總結
以上是生活随笔為你收集整理的linux container框架,理解和配置LinuxContainerExecutor的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: logstash mysql增量_Log
- 下一篇: ftp服务器复制粘贴文件夹,ftp服务器