hadoop2.7.7叢集使用kerberos1.18.1進行授權驗證(二)

介紹
上一篇我們搭建完成了hadoop叢集中的kerberos,并完成了驗證,接着我們就要設定hadoop來使用Kerberos了。叢集概況再介紹下
叢集情況:
centeros7.5 hadoop2.7.7
叢集中有機器三台其中181是 namenode和datanode,其他2台是datanode
10.106.145.181 master01.hadoop
10.106.145.182 slave01.hadoop
10.106.145.183 slave02.hadoop
目前我們已經再181機器上搭建了kdc 并在所有機器上安裝了kerberos的用戶端,目前在kdc中建立了2個user principal 和4種 server principal分别如下
user principal :
root/[email protected]
server principal :
hdfs/[email protected]
hdfs/[email protected]
hdfs/[email protected]
http/[email protected]
http/[email protected]
http/[email protected]
mapred/[email protected]
mapred/[email protected]
mapred/[email protected]
yarn/[email protected]
yarn/[email protected]
yarn/
hadoop/[email protected]
hadoop/[email protected]
hadoop/
配置Hadoop支援kerberos我們需要兩步
1.映射service principals 和系統的使用者名
2.在hadoop配置檔案中添加kerberos資訊
一 産生keytab file
因為目前叢集中的機器都是使用一個賬号 hadoop來啟動和管理的,所有這裡我們就隻産生hadoop的keytab檔案,實際生産中如果多個服務都有自己的賬号,那麼就按實際情況産生多個賬号的keytab
xst -k hadoop.keytab hadoop/[email protected] hadoop/[email protected] hadoop/[email protected]
将上産生的檔案分發hadoop叢集各個機器上去,路徑我們這裡先放到 haddop安裝路徑的 etc/hadoop中去,另外我們叢集啟動都是使用賬号 hadoop的,所有我們将這個幾個檔案授權給hadoop使用者 并修改權限為400
chown hadoop:hadoop hadoop.keytab
chmod 400 hadoop.keytab
mv hadoop.keytab /usr/local/hadoop-2.7.7/etc/hadoop/
scp到其它機器上
scp hadoop.keytab [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/
scp hadoop.keytab [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/
二 映射service principal 和系統使用者
kerberos使用在core-site.xml檔案中的設定的配置規則,通過設定hadoop.security
.auth_to_local來映射service principals 和作業系統的使用者名,預設規則就是簡單的将service principals中的名字直接轉換成系統使用者名,這裡我們回顧下service principals的命名規則 主名稱+執行個體+領域,其中執行個體是可選的,這裡預設規則就是将主名稱 直接映射系統使用者名。
如果主名稱是和系統的使用者名一樣的(比如hdfs/master01.hadoop 和 linux系統中的使用者 hdfs),則不需要設定其它規則,使用預設規則即可,注意我們也可以在krb5.cnf中使用 auth_to_local 參數進行指定。
我們來看下不一緻的情況,則需要使用hadoop.security.auth_to_local來進行映射了,映射規則分三部分
base+filter+substitution(替換)
base:
過使用 數字(1或2):樣式 的格式,其中樣式中$0指定領域 $1 指定 主名稱 $2指定執行個體名,采用的格式為[:],這裡數字 1 代表隻有主名稱 即UPN ,2 代表 主名稱+執行個體 即SPN
格式如下 [:]
例子如下:
pig/[email protected] [1: $1] 無法比對
pig/[email protected] [2: [email protected]$0] 比對結果為 [email protected]
[1: $1] 比對結果為 city
[2: [email protected]$0] 無法比對
filter:
接收過濾器是一個标準的正規表達式,用于比對第一部分——principal translation,輸出的短名稱,隻有當成功比對時,才會将該短名稱傳遞到第三部分——short name substitution。當不比對時,則跳過該rule,進行下一條rule的比對,否則進行下一步。
substitution:
第三部分可以了解為linux中sed替換指令 (s/.../.../g) ,其輸入是principal translation提取出的短名稱。這部分是可選的,整個的規則為 RULE:[:]()s///
[email protected]
s/(.*).MYCOMPANY.COM/1/: sam
s/.MYCOMPANY.COM// : sam
DEFAULT:
DEFAULT是預設規則,預設将principal的第一個component作為短名稱輸出
這裡我們針對hadoop/[email protected] 的principal 可以将 hadoop.security.auth_to_local設定為[2: [email protected]$0]
三 安裝jsvc (hdfs節點)
在所有的DataNodes節點上都要安裝jsvc,以便啟用kerberos,在這裡我們三台電腦都是DataNode節點所有都需要安裝javc,如果不确定就整個叢集都安裝一邊,防止後續擴充成新的DataNode
安裝autoconf 和gcc
yum install autoconf -y
yum install gcc -y
下載下傳jsvc源包
tar -zxvf commons-daemon-1.2.2-src.tar.gz
cd ./commons-daemon-1.2.2-src/src/native/unix
./support/buildconf.sh
./configure
make
檢查生成情況
在目前目錄下産生了jsvc檔案,我們來檢查下是否有效
./jsvc -help
将該jsvc放置到hadoop 的lib目錄下
mv jsvc /usr/local/hadoop-2.7.7/lib/
配置hadoop-env.sh
找到配置中這兩項進行修改
vi /usr/local/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
export JSVC_HOME=/usr/local/hadoop-2.7.7/lib/
export HADOOP_SECURE_DN_USER=hadoop
export HADOOP_SECURE_DN_PID_DIR=/var/lib/hadoop-hdfs
export HADOOP_SECURE_DN_LOG_DIR=/var/log/hadoop-hdfs
分發 jsvc 和 hadoop-env.sh
scp /usr/local/hadoop-2.7.7/etc/hadoop/hadoop-env.sh [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop
scp /usr/local/hadoop-2.7.7/etc/hadoop/hadoop-env.sh [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop
scp /usr/local/hadoop-2.7.7/lib/jsvc [email protected]:/usr/local/hadoop-2.7.7/lib/
scp /usr/local/hadoop-2.7.7/lib/jsvc [email protected]:/usr/local/hadoop-2.7.7/lib/
四 配置HDFS相關檔案
配置core-site.xml
添加下面屬性
hadoop.security.authentication
kerberos
hadoop.security.authorization
true
hadoop.security.auth_to_local
RULE:[2:[email protected]$0]
DEFAULT
hadoop.rpc.protection
privacy
配置hdfs-site.xml
dfs.block.access.token.enable
true
dfs.namenode.keytab.file
/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab
dfs.namenode.kerberos.principal
hadoop/[email protected]
dfs.namenode.kerberos.internal.spnego.principal
hadoop/[email protected]
dfs.secondary.namenode.keytab.file
/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab
dfs.secondary.namenode.kerberos.principal
hadoop/[email protected]
dfs.datanode.keytab.file
/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab
dfs.datanode.kerberos.principal
hadoop/[email protected]
dfs.datanode.address
0.0.0.0:1004
dfs.datanode.http.address
0.0.0.0:1006
dfs.journalnode.keytab.file
/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab
dfs.journalnode.kerberos.principal
hadoop/[email protected]
dfs.journalnode.kerberos.internal.spnego.principal
hadoop/[email protected]
dfs.web.authentication.kerberos.principal
hadoop/[email protected]
dfs.web.authentication.kerberos.keytab
/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab
配置 yarn-site xml
yarn.resourcemanager.keytab
/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab
yarn.resourcemanager.principal
hadoop/[email protected]
yarn.nodemanager.keytab
/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab
yarn.nodemanager.principal
hadoop/[email protected]
分發hdfs-site.xml core-site.xml
scp yarn-site.xml hdfs-site.xml core-site.xml [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/
scp yarn-site.xml hdfs-site.xml core-site.xml [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/
五 測試HDFS服務
啟動 NameNode 和 Second Namenode(使用hadoop賬号)
./start-dfs.sh
啟動DataNode(使用root賬号)
sudo ./start-secure-dns.sh
jps後我們發現datanode不見了 變成了Secur
關閉時候 可以反過來先關閉datenode 後關閉 namenode
sudo ./stop-secure-dns.sh
./stop-dfs.sh
hdfs dfsadmin -report
上傳個檔案試試
hadoop fs -put httpfs.sh /
hadoop fs -ls /
六 配置YARN服務
配置yarn-site.xml
添加屬性
yarn.nodemanager.container-executor.class
org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor
yarn.nodemanager.linux-container-executor.group
hadoop
這兩個選項是的yarn也在送出任務時候也可以繼續能通過驗證,這裡container-executor在hadoop的bin目錄下
配置container.executor.cfg
檔案 /usr/local/hadoop-2.7.7/etc/hadoop/container-executor.cfg
添加幾個選項進去
yarn.nodemanager.linux-container-executor.group=hadoop #configured value of yarn.nodemanager.linux-container-executor.group
banned.users=hadoop #comma separated list of users who can not run applications
min.user.id=1000 #Prevent other super-users
allowed.system.users=hadoop ##comma separated list of system users who CAN run applications
#yarn.nodemanager.log-dirs=/var/log/yarn
分發yarn-site.xml 和 container.executor.cfg
scp /usr/local/hadoop-2.7.7/etc/hadoop/yarn-site.xml [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/
scp /usr/local/hadoop-2.7.7/etc/hadoop/yarn-site.xml [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/
scp /usr/local/hadoop-2.7.7/etc/hadoop/container-executor.cfg [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/
scp /usr/local/hadoop-2.7.7/etc/hadoop/container-executor.cfg [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/
檢查container.executor
hadoop checknative
七 測試YARN服務
啟動yarn
./start-yarn.sh
jps
同樣我們看到ResourceManager是能看到的,而nodemanager是看不見的
測試yarn on kerberos是否正常運作
上傳jar包到hdfs上
hadoop fs -put /usr/local/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar /
hadoop fs -chmod 777 /hadoop-mapreduce-examples-2.7.7.jar
hadoop fs -ls /
測試jar包
hadoop jar /usr/local/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /httpfs.sh /test/myresoult