天天看點

Hadoop 中zoo_hadoop使用kerberos進行授權驗證(二)

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

Hadoop 中zoo_hadoop使用kerberos進行授權驗證(二)

介紹

上一篇我們搭建完成了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源包

Hadoop 中zoo_hadoop使用kerberos進行授權驗證(二)

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

Hadoop 中zoo_hadoop使用kerberos進行授權驗證(二)

啟動DataNode(使用root賬号)

sudo ./start-secure-dns.sh

Hadoop 中zoo_hadoop使用kerberos進行授權驗證(二)

jps後我們發現datanode不見了 變成了Secur

Hadoop 中zoo_hadoop使用kerberos進行授權驗證(二)

關閉時候 可以反過來先關閉datenode 後關閉 namenode

sudo ./stop-secure-dns.sh

./stop-dfs.sh

hdfs dfsadmin -report

Hadoop 中zoo_hadoop使用kerberos進行授權驗證(二)

上傳個檔案試試

hadoop fs -put httpfs.sh /

hadoop fs -ls /

Hadoop 中zoo_hadoop使用kerberos進行授權驗證(二)

六 配置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

Hadoop 中zoo_hadoop使用kerberos進行授權驗證(二)

七 測試YARN服務

啟動yarn

./start-yarn.sh

jps

同樣我們看到ResourceManager是能看到的,而nodemanager是看不見的

Hadoop 中zoo_hadoop使用kerberos進行授權驗證(二)

測試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 /

Hadoop 中zoo_hadoop使用kerberos進行授權驗證(二)

測試jar包

hadoop jar /usr/local/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /httpfs.sh /test/myresoult

繼續閱讀