公司里要給Hadoop配置Kerberos,記錄一下過程中遇到的問題。
共有三臺服務(wù)器:Hadoop102,Hadoop103,Hadoop104
Hadoop節(jié)點(diǎn)分布如下(后續(xù)配置Kerberos的一些文件夾時要嚴(yán)格按照自身Hadoop集群中的節(jié)點(diǎn)情況,我這里只是舉個例子):
Hadoop102:????????DataNode,????????NameNode,????????ResourceManager,????????NodeManager
Hadoop103:????????DataNode,????????NodeManager,????????SecondaryNameNode
Hadoop104:? ? ? ? DataNode,????????NodeManager
Kerberos部署
需要配置Kerberos服務(wù)端和客戶端,我這里選擇Hadoop102作為服務(wù)端
安裝Kerberos服務(wù)
Hadoop102:
yum install -y krb5-server
Hadoop102,Hadoop103,Hadoop104都需要安裝客戶端:
yum install -y krb5-workstation krb5-libs
修改配置文件
接下來到了非常關(guān)鍵的步驟,修改配置文件
Hadoop102獨(dú)有的/var/kerberos/krb5kdc/kdc.conf
修改如下內(nèi)容
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
EXAMPLE.COM = {
#master_key_type = aes256-cts
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
注意這里要修改的只有最后一行supported_enctypes,只需要刪除aes256-cts:normal,刪除的原因是留著它,需要java新導(dǎo)入一個包,這個坑不是我親自踩的,網(wǎng)上找來的,因此不去驗證它的有效性,不耽誤后續(xù)操作。
三臺服務(wù)器都有的 /etc/krb5.conf
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
default_realm = HADOOP.COM
#default_ccache_name = KEYRING:persistent:%{uid}
udp_preference_limit=1
[realms]
HADOOP.COM = {
kdc = hadoop102
admin_server = hadoop102
}
[domain_realm]
.example.com = HADOOP.COM
example.com = HADOOP.COM
這里主要注意
初始化數(shù)據(jù)庫
在服務(wù)端主機(jī) (hadoop102) 執(zhí)行以下命令,并根據(jù)提示輸入密碼。
kdb5_util create -s
修改管理員權(quán)限配置文件
在服務(wù)端主機(jī) (hadoop102) 修改 /var/kerberos/krb5kdc/kadm5.acl 文件,內(nèi)容如下*/admin@HADOOP.COM *
啟動 Kerberos 相關(guān)服務(wù)
在主節(jié)點(diǎn) (hadoop102) 啟動KDC,并配置開機(jī)自啟
[root@hadoop102 ~]# systemctl start krb5kdc
[root@hadoop102 ~]# systemctl enable krb5kdc
?
在主節(jié)點(diǎn) (hadoop102) 啟動 Kadmin,該服務(wù)為 KDC 數(shù)據(jù)庫訪問入口
[root@hadoop102 ~]# systemctl start kadmin
[root@hadoop102 ~]# systemctl enable kadmin
創(chuàng)建 Kerberos 管理員用戶
在 KDC 所在主機(jī) (hadoop102),執(zhí)行以下命令,并按照提示輸入密碼
[root@hadoop102 ~]# kadmin.local -q "addprinc admin/admin"
之后admin就作為KDC服務(wù)器的管理員,KDC的邏輯是這樣的,如果輸入如上命令,就會生成你自己設(shè)置密碼的用戶,而還有一種寫法你自己不知道密碼,隨機(jī)密碼,將密碼文件寫入/etc/security/krb5
Hadoop Kerberos 配置
注意:以下所有配置,如果沒有指定是哪臺服務(wù)器做的,例如如下開頭,則需要在所有服務(wù)器上進(jìn)行操作,并且注意配置文件的分發(fā)。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-758134.html
創(chuàng)建 Hadoop 系統(tǒng)用戶?
為 Hadoop 開啟 Kerberos,需為不同服務(wù)準(zhǔn)備不同的用戶,啟動服務(wù)時需要使用相應(yīng)的用戶。
以下操作每臺服務(wù)器都要做
創(chuàng)建hadoop組
groupadd hadoop
創(chuàng)建各用戶并設(shè)置密碼
useradd hdfs -g hadoop
echo hdfs | passwd --stdin ?hdfs
useradd yarn -g hadoop
echo yarn | passwd --stdin yarn
useradd mapred -g hadoop
echo mapred | passwd --stdin mapred
為 Hadoop 各服務(wù)創(chuàng)建 Kerberos 主體
主體格式如下:ServiceName/HostName@REALM
,例如?dn/hadoop102@EXAMPLE.COM
各服務(wù)所需主體如下
環(huán)境:3臺節(jié)點(diǎn),主機(jī)名分別為hadoop102,hadoop103,hadoop104
創(chuàng)建主體?
在所有節(jié)點(diǎn)創(chuàng)建 keytab 文件目錄,這個keytab目錄就是上面所說的存放你沒有指定密碼但是KDC服務(wù)自動生成密碼的密碼文件的所在目錄,每臺服務(wù)器都要運(yùn)行
mkdir /etc/security/keytab/
chown -R root:hadoop /etc/security/keytab/
chmod 770 /etc/security/keytab/
以下命令在 hadoop102 節(jié)點(diǎn)執(zhí)行
NameNode (hadoop102)
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey nn/hadoop102"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/nn.service.keytab nn/hadoop102"
DataNode (hadoop102)
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey dn/hadoop102"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/dn.service.keytab dn/hadoop102"
NodeManager (hadoop102)
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey nm/hadoop102"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/nm.service.keytab nm/hadoop102"
JobHistory Server (hadoop102)
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey jhs/hadoop102"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/jhs.service.keytab jhs/hadoop102"
Web UI (hadoop102)
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey HTTP/hadoop102"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/spnego.service.keytab HTTP/hadoop102"
?以下命令在 hadoop103 執(zhí)行
ResourceManager (hadoop103)
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey rm/hadoop103"
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/rm.service.keytab rm/hadoop103"
DataNode (hadoop103)
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey dn/hadoop103"
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/dn.service.keytab dn/hadoop103"
NodeManager (hadoop103)
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey nm/hadoop103"
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/nm.service.keytab nm/hadoop103"
Web UI (hadoop103)
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey HTTP/hadoop103"
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/spnego.service.keytab HTTP/hadoop103"
以下命令在 hadoop104 執(zhí)行
DataNode(hadoop104)
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey dn/hadoop104"
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/dn.service.keytab dn/hadoop104"
Secondary NameNode (hadoop104)
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey sn/hadoop104"
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/sn.service.keytab sn/hadoop104"
NodeManager (hadoop104)
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey nm/hadoop104"
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/nm.service.keytab nm/hadoop104"
Web UI (hadoop104)
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey HTTP/hadoop104"
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/spnego.service.keytab HTTP/hadoop104"
修改所有節(jié)點(diǎn) keytab 文件的所有者和訪問權(quán)限
chown -R root:hadoop /etc/security/keytab/
chmod 660 /etc/security/keytab/*
修改 Hadoop 配置文件
需要修改的內(nèi)容如下,修改完畢需要分發(fā)所改文件,建議在Hadoop102上修改之后通過scp -r Hadoop103/104:$PWD命令進(jìn)行分發(fā)
core-site.xml
[root@hadoop102 ~]# vim /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
增加以下內(nèi)容
<!-- Kerberos主體到系統(tǒng)用戶的映射機(jī)制 -->
<property>
<name>hadoop.security.auth_to_local.mechanism</name>
<value>MIT</value>
</property>
<!-- Kerberos主體到系統(tǒng)用戶的具體映射規(guī)則 -->
<property>
<name>hadoop.security.auth_to_local</name>
<value>
RULE:[2:$1/$2@$0]([ndj]n\/.*@EXAMPLE\.COM)s/.*/hdfs/
RULE:[2:$1/$2@$0]([rn]m\/.*@EXAMPLE\.COM)s/.*/yarn/
RULE:[2:$1/$2@$0](jhs\/.*@EXAMPLE\.COM)s/.*/mapred/
DEFAULT
</value>
</property>
<!-- 啟用Hadoop集群Kerberos安全認(rèn)證 -->
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<!-- 啟用Hadoop集群授權(quán)管理 -->
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
<!-- Hadoop集群間RPC通訊設(shè)為僅認(rèn)證模式 -->
<property>
<name>hadoop.rpc.protection</name>
<value>authentication</value>
</property>
hdfs-site.xml
[root@hadoop102 ~]# vim /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml
增加以下內(nèi)容
<!-- 訪問DataNode數(shù)據(jù)塊時需通過Kerberos認(rèn)證 -->
<property>
<name>dfs.block.access.token.enable</name>
<value>true</value>
</property>
<!-- NameNode服務(wù)的Kerberos主體,_HOST會自動解析為服務(wù)所在的主機(jī)名 -->
<property>
<name>dfs.namenode.kerberos.principal</name>
<value>nn/_HOST@EXAMPLE.COM</value>
</property>
<!-- NameNode服務(wù)的Kerberos密鑰文件路徑 -->
<property>
<name>dfs.namenode.keytab.file</name>
<value>/etc/security/keytab/nn.service.keytab</value>
</property>
<!-- Secondary NameNode服務(wù)的Kerberos主體 -->
<property>
<name>dfs.secondary.namenode.keytab.file</name>
<value>/etc/security/keytab/sn.service.keytab</value>
</property>
<!-- Secondary NameNode服務(wù)的Kerberos密鑰文件路徑 -->
<property>
<name>dfs.secondary.namenode.kerberos.principal</name>
<value>sn/_HOST@EXAMPLE.COM</value>
</property>
<!-- NameNode Web服務(wù)的Kerberos主體 -->
<property>
<name>dfs.namenode.kerberos.internal.spnego.principal</name>
<value>HTTP/_HOST@EXAMPLE.COM</value>
</property>
<!-- WebHDFS REST服務(wù)的Kerberos主體 -->
<property>
<name>dfs.web.authentication.kerberos.principal</name>
<value>HTTP/_HOST@EXAMPLE.COM</value>
</property>
<!-- Secondary NameNode Web UI服務(wù)的Kerberos主體 -->
<property>
<name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name>
<value>HTTP/_HOST@EXAMPLE.COM</value>
</property>
<!-- Hadoop Web UI的Kerberos密鑰文件路徑 -->
<property>
<name>dfs.web.authentication.kerberos.keytab</name>
<value>/etc/security/keytab/spnego.service.keytab</value>
</property>
<!-- DataNode服務(wù)的Kerberos主體 -->
<property>
<name>dfs.datanode.kerberos.principal</name>
<value>dn/_HOST@EXAMPLE.COM</value>
</property>
<!-- DataNode服務(wù)的Kerberos密鑰文件路徑 -->
<property>
<name>dfs.datanode.keytab.file</name>
<value>/etc/security/keytab/dn.service.keytab</value>
</property>
<!-- 配置NameNode Web UI 使用HTTPS協(xié)議 -->
<property>
<name>dfs.http.policy</name>
<value>HTTPS_ONLY</value>
</property>
<!-- 配置DataNode數(shù)據(jù)傳輸保護(hù)策略為僅認(rèn)證模式 -->
<property>
<name>dfs.data.transfer.protection</name>
<value>authentication</value>
</property>
yarn-site.xml
[root@hadoop102 ~]# vim /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml
增加以下內(nèi)容
<!-- Resource Manager 服務(wù)的Kerberos主體 -->
<property>
<name>yarn.resourcemanager.principal</name>
<value>rm/_HOST@EXAMPLE.COM</value>
</property>
<!-- Resource Manager 服務(wù)的Kerberos密鑰文件 -->
<property>
<name>yarn.resourcemanager.keytab</name>
<value>/etc/security/keytab/rm.service.keytab</value>
</property>
<!-- Node Manager 服務(wù)的Kerberos主體 -->
<property>
<name>yarn.nodemanager.principal</name>
<value>nm/_HOST@EXAMPLE.COM</value>
</property>
<!-- Node Manager 服務(wù)的Kerberos密鑰文件 -->
<property>
<name>yarn.nodemanager.keytab</name>
<value>/etc/security/keytab/nm.service.keytab</value>
</property>
mapred-site.xml
[root@hadoop102 ~]# vim /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml
增加以下內(nèi)容
<!-- 歷史服務(wù)器的Kerberos主體 -->
<property>
<name>mapreduce.jobhistory.keytab</name>
<value>/etc/security/keytab/jhs.service.keytab</value>
</property>
<!-- 歷史服務(wù)器的Kerberos密鑰文件 -->
<property>
<name>mapreduce.jobhistory.principal</name>
<value>jhs/_HOST@EXAMPLE.COM</value>
</property>
配置HDFS使用 HTTPS 安全傳輸協(xié)議
生成 keystore 的密碼及相應(yīng)信息的密鑰庫
[root@hadoop102 ~]# keytool -keystore /etc/security/keytab/keystore -alias jetty -genkey -keyalg RSA
輸入密鑰庫口令:
再次輸入新口令:
您的名字與姓氏是什么?
[Unknown]:
您的組織單位名稱是什么?
[Unknown]:
您的組織名稱是什么?
[Unknown]:
您所在的城市或區(qū)域名稱是什么?
[Unknown]:
您所在的省/市/自治區(qū)名稱是什么?
[Unknown]:
該單位的雙字母國家/地區(qū)代碼是什么?
[Unknown]:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正確?
[否]: y
輸入 <jetty> 的密鑰口令
(如果和密鑰庫口令相同, 按回車):
再次輸入新口令:
修改 keystore文件的所有者和訪問權(quán)限
[root@hadoop102 ~]# chown -R root:hadoop /etc/security/keytab/keystore
[root@hadoop102 ~]# chmod 660 /etc/security/keytab/keystore
將該證書分發(fā)到集群中的每臺節(jié)點(diǎn)的相同路徑
[root@hadoop102 ~]# xsync /etc/security/keytab/keystore
修改hadoop配置文件ssl-server.xml.example
該文件位于?$HADOOP_HOME/etc/hadoop
目錄
修改文件名為 ssl-server.xml
[root@hadoop102 ~]# mv $HADOOP_HOME/etc/hadoop/ssl-server.xml.example $HADOOP_HOME/etc/hadoop/ssl-server.xml
修改以下內(nèi)容?
[root@hadoop102 ~]# vim $HADOOP_HOME/etc/hadoop/ssl-server.xml
<!-- SSL密鑰庫路徑 -->
<property>
<name>ssl.server.keystore.location</name>
<value>/etc/security/keytab/keystore</value>
</property>
<!-- SSL密鑰庫密碼 -->
<property>
<name>ssl.server.keystore.password</name>
<value>123456</value>
</property>
<!-- SSL可信任密鑰庫路徑 -->
<property>
<name>ssl.server.truststore.location</name>
<value>/etc/security/keytab/keystore</value>
</property>
<!-- SSL密鑰庫中密鑰的密碼 -->
<property>
<name>ssl.server.keystore.keypassword</name>
<value>123456</value>
</property>
<!-- SSL可信任密鑰庫密碼 -->
<property>
<name>ssl.server.truststore.password</name>
<value>123456</value>
</property>
?
分發(fā)ssl-server.xml文件
[root@hadoop102 ~]# xsync $HADOOP_HOME/etc/hadoop/ssl-server.xml
配置 Yarn 使用 LinuxContainerExecutor
修改所有節(jié)點(diǎn)的container-executor所有者和權(quán)限
要求其所有者為 root,所有組為 hadoop (啟動 NodeManger 的 yarn 用戶的所屬組),權(quán)限為 6050。其默認(rèn)路徑為?$HADOOP_HOME/bin
chown root:hadoop /opt/module/hadoop-3.1.3/bin/container-executor
chmod 6050 /opt/module/hadoop-3.1.3/bin/container-executor
修改所有節(jié)點(diǎn)的 container-executor.cfg文件的所有者和權(quán)限
要求該文件及其所有的上級目錄的所有者均為 root,所有組為 hadoop(啟動NodeManger 的 yarn 用戶的所屬組),權(quán)限為 400。其默認(rèn)路徑為$HADOOP_HOME/etc/hadoop
chown root:hadoop /opt/module/hadoop-3.1.3/etc/hadoop/container-executor.cfg
chown root:hadoop /opt/module/hadoop-3.1.3/etc/hadoop
chown root:hadoop /opt/module/hadoop-3.1.3/etc
chown root:hadoop /opt/module/hadoop-3.1.3
chown root:hadoop /opt/module
chmod 400 /opt/module/hadoop-3.1.3/etc/hadoop/container-executor.cfg
修改$HADOOP_HOME/etc/hadoop/container-executor.cfg
[root@hadoop102 ~]# vim $HADOOP_HOME/etc/hadoop/container-executor.cfg
內(nèi)容如下
yarn.nodemanager.linux-container-executor.group=hadoop
banned.users=hdfs,yarn,mapred
min.user.id=1000
allowed.system.users=feature.tc.enabled=false
修改$HADOOP_HOME/etc/hadoop/yarn-site.xml
文件
[root@hadoop102 ~]# vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
增加以下內(nèi)容
<!-- 配置Node Manager使用LinuxContainerExecutor管理Container -->
<property>
<name>yarn.nodemanager.container-executor.class</name>
<value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>
</property>
<!-- 配置Node Manager的啟動用戶的所屬組 -->
<property>
<name>yarn.nodemanager.linux-container-executor.group</name>
<value>hadoop</value>
</property>
<!-- LinuxContainerExecutor腳本路徑 -->
<property>
<name>yarn.nodemanager.linux-container-executor.path</name>
<value>/opt/module/hadoop-3.1.3/bin/container-executor</value>
</property>
分發(fā)container-executor.cfg和yarn-site.xml文件
[root@hadoop102 ~]# xsync $HADOOP_HOME/etc/hadoop/container-executor.cfg
[root@hadoop102 ~]# xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
安全模式下啟動 Hadoop 集群
修改特定本地路徑權(quán)限
$HADOOP_LOG_DIR (所有節(jié)點(diǎn))
該變量位于?hadoop-env.sh
?文件,默認(rèn)值為?${HADOOP_HOME}/logs
chown hdfs:hadoop /opt/module/hadoop-3.1.3/logs/
chmod 775 /opt/module/hadoop-3.1.3/logs/?
dfs.namenode.name.dir (NameNode節(jié)點(diǎn))
該參數(shù)位于?hdfs-site.xml 文件,默認(rèn)值為?file://${hadoop.tmp.dir}/dfs/name
[root@hadoop102 ~]# chown -R hdfs:hadoop /opt/module/hadoop-3.1.3/data/dfs/name/
[root@hadoop102 ~]# chmod 700 /opt/module/hadoop-3.1.3/data/dfs/name/
dfs.datanode.data.dir (DataNode節(jié)點(diǎn))
該參數(shù)為于 hdfs-site.xml 文件,默認(rèn)值為?file://${hadoop.tmp.dir}/dfs/data
?
chown -R hdfs:hadoop /opt/module/hadoop-3.1.3/data/dfs/data/
chmod 700 /opt/module/hadoop-3.1.3/data/dfs/data/?
dfs.namenode.checkpoint.dir (SecondaryNameNode節(jié)點(diǎn))?
該參數(shù)位于 hdfs-site.xml 文件,默認(rèn)值為file://${hadoop.tmp.dir}/dfs/namesecondary
[root@hadoop104 ~]# chown -R hdfs:hadoop /opt/module/hadoop-3.1.3/data/dfs/namesecondary/
[root@hadoop104 ~]# chmod 700 /opt/module/hadoop-3.1.3/data/dfs/namesecondary/
yarn.nodemanager.local-dirs (NodeManager節(jié)點(diǎn))?
該參數(shù)位于yarn-site.xml文件,默認(rèn)值為file://${hadoop.tmp.dir}/nm-local-dir
?
chown -R yarn:hadoop /opt/module/hadoop-3.1.3/data/nm-local-dir/
chmod -R 775 /opt/module/hadoop-3.1.3/data/nm-local-dir/?
yarn.nodemanager.log-dirs (NodeManager節(jié)點(diǎn))
該參數(shù)位于 yarn-site.xml 文件,默認(rèn)值為?$HADOOP_LOG_DIR/userlogs
chown yarn:hadoop /opt/module/hadoop-3.1.3/logs/userlogs/
chmod 775 /opt/module/hadoop-3.1.3/logs/userlogs/?
啟動 HDFS
需要注意的是,啟動不同服務(wù)時需要使用對應(yīng)的用戶
(1)在主節(jié)點(diǎn) (hadoop102) 配置hdfs用戶到所有節(jié)點(diǎn)的免密登錄。
(2)修改主節(jié)點(diǎn) (hadoop102) 節(jié)點(diǎn)的$HADOOP_HOME/sbin/start-dfs.sh
腳本,在頂部增加以下環(huán)境變量。
[root@hadoop102 ~]# vim $HADOOP_HOME/sbin/start-dfs.sh
在頂部增加如下內(nèi)容
HDFS_DATANODE_USER=hdfs
HDFS_NAMENODE_USER=hdfs
HDFS_SECONDARYNAMENODE_USER=hdfs
注:$HADOOP_HOME/sbin/stop-dfs.sh
也需在頂部增加上述環(huán)境變量才可使用。
以 root 用戶執(zhí)行群起腳本,即可啟動 HDFS 集群。
[root@hadoop102 ~]# start-dfs.sh
查看HFDS web頁面
訪問地址為https://hadoop102:9871
修改 HDFS 特定路徑訪問權(quán)限
?
若上述路徑不存在,需手動創(chuàng)建
創(chuàng)建 hdfs/hadoop 主體,執(zhí)行以下命令并按照提示輸入密碼
[root@hadoop102 ~]# kadmin.local -q "addprinc hdfs/hadoop"
認(rèn)證 hdfs/hadoop 主體,執(zhí)行以下命令并按照提示輸入密碼
[root@hadoop102 ~]# kinit hdfs/hadoop
按照上述要求修改指定路徑的所有者和權(quán)限
修改/、/tmp、/user路徑
[root@hadoop102 ~]# hadoop fs -chown hdfs:hadoop / /tmp /user
[root@hadoop102 ~]# hadoop fs -chmod 755 /
[root@hadoop102 ~]# hadoop fs -chmod 1777 /tmp
[root@hadoop102 ~]# hadoop fs -chmod 775 /user
參數(shù) yarn.nodemanager.remote-app-log-dir 位于 yarn-site.xml 文件,默認(rèn)值 /tmp/logs
[root@hadoop102 ~]# hadoop fs -chown yarn:hadoop /tmp/logs
[root@hadoop102 ~]# hadoop fs -chmod 1777 /tmp/logs
參數(shù) mapreduce.jobhistory.intermediate-done-dir 位于 mapred-site.xm l文件,默認(rèn)值為 /tmp/hadoop-yarn/staging/history/done_intermediate,需保證該路徑的所有上級目錄(除/tmp) 的所有者均為mapred,所屬組為hadoop,權(quán)限為770
[root@hadoop102 ~]# hadoop fs -chown -R mapred:hadoop /tmp/hadoop-yarn/staging/history/done_intermediate
[root@hadoop102 ~]# hadoop fs -chmod -R 1777 /tmp/hadoop-yarn/staging/history/done_intermediate
[root@hadoop102 ~]# hadoop fs -chown mapred:hadoop /tmp/hadoop-yarn/staging/history/
[root@hadoop102 ~]# hadoop fs -chown mapred:hadoop /tmp/hadoop-yarn/staging/
[root@hadoop102 ~]# hadoop fs -chown mapred:hadoop /tmp/hadoop-yarn/
[root@hadoop102 ~]# hadoop fs -chmod 770 /tmp/hadoop-yarn/staging/history/
[root@hadoop102 ~]# hadoop fs -chmod 770 /tmp/hadoop-yarn/staging/
[root@hadoop102 ~]# hadoop fs -chmod 770 /tmp/hadoop-yarn/
參數(shù) mapreduce.jobhistory.done-dir 位于 mapred-site.xml 文件,默認(rèn)值為 /tmp/hadoop-yarn/staging/history/done ,需保證該路徑的所有上級目錄 (除/tmp) 的所有者均為 mapred,所屬組為 hadoop,權(quán)限為 770
[root@hadoop102 ~]# hadoop fs -chown -R mapred:hadoop /tmp/hadoop-yarn/staging/history/done
[root@hadoop102 ~]# hadoop fs -chmod -R 750 /tmp/hadoop-yarn/staging/history/done
[root@hadoop102 ~]# hadoop fs -chown mapred:hadoop /tmp/hadoop-yarn/staging/history/
[root@hadoop102 ~]# hadoop fs -chown mapred:hadoop /tmp/hadoop-yarn/staging/
[root@hadoop102 ~]# hadoop fs -chown mapred:hadoop /tmp/hadoop-yarn/
[root@hadoop102 ~]# hadoop fs -chmod 770 /tmp/hadoop-yarn/staging/history/
[root@hadoop102 ~]# hadoop fs -chmod 770 /tmp/hadoop-yarn/staging/
[root@hadoop102 ~]# hadoop fs -chmod 770 /tmp/hadoop-yarn/
啟動 Yarn
(1) 在Yarn主節(jié)點(diǎn) (hadoop103) 配置 yarn 用戶到所有節(jié)點(diǎn)的免密登錄。
(2) 修改主節(jié)點(diǎn) (hadoop103) 的?$HADOOP_HOME/sbin/start-yarn.sh
,在頂部增加以下環(huán)境變量。
[root@hadoop103 ~]# vim $HADOOP_HOME/sbin/start-yarn.sh
在頂部增加如下內(nèi)容
YARN_RESOURCEMANAGER_USER=yarn
YARN_NODEMANAGER_USER=yarn
?注:stop-yarn.sh也需在頂部增加上述環(huán)境變量才可使用。
以 root 用戶執(zhí)行?$HADOOP_HOME/sbin/start-yarn.sh
腳本即可啟動yarn集群。
[root@hadoop103 ~]# start-yarn.sh
訪問 Yarn web 頁面
訪問地址為 http://hadoop103:8088
啟動 HistoryServer
啟動歷史服務(wù)器
[root@hadoop102 ~]# sudo -i -u mapred mapred --daemon start historyserver
查看歷史服務(wù)器 web 頁面
訪問地址為 http://hadoop102:19888
安全集群使用
具體要求
以下使用說明均基于普通用戶,安全集群對用戶有以下要求:
- 集群中的每個節(jié)點(diǎn)都需要創(chuàng)建該用戶
- 該用戶需要屬于hadoop用戶組
- 需要創(chuàng)建該用戶對應(yīng)的Kerberos主體
此處以 fancy 用戶為例,具體操作如下
創(chuàng)建用戶 (存在可跳過),須在所有節(jié)點(diǎn)執(zhí)行
useradd fancy
echo fancy | passwd --stdin fancy
加入 hadoop 組,須在所有節(jié)點(diǎn)執(zhí)行
usermod -a -G hadoop fancy
?創(chuàng)建主體
kadmin -p admin/admin -wadmin -q"addprinc -pw fancy fancy"
Shell 命令
A、認(rèn)證
[fancy@hadoop102 ~]$ kinit fancy
B、查看當(dāng)前認(rèn)證用戶
[fancy@hadoop102 ~]$ kinit fancy
C、執(zhí)行命令
[fancy@hadoop102 ~]$ hadoop fs -ls /
D、注銷認(rèn)證
[fancy@hadoop102 ~]$ kdestroy
E、再次執(zhí)行查看命令
[fancy@hadoop102 ~]$ hadoop fs -ls /
Kerberos客戶端
安裝 Kerberos 客戶端
下載地址:http://web.mit.edu/kerberos/dist/kfw/4.1/kfw-4.1-amd64.msi
下載之后按照提示安裝
編輯 C:\ProgramData\MIT\Kerberos5\krb5.ini 文件,內(nèi)容如下
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
default_realm = HADOOP.COM
udp_preference_limit=1
[realms]
HADOOP.COM = {
kdc = hadoop102
admin_server = hadoop102
}
[domain_realm]
.hadoop.com = HADOOP.COM
hadoop.com = HADOOP.COM
配置火狐瀏覽器
打開瀏覽器,在地址欄輸入 “about:config” ,點(diǎn)擊回車
搜索 “network.negotiate-auth.trusted-uris” ,修改值為要訪問的主機(jī)名(hadoop102)
搜索 “network.auth.use-sspi”,雙擊將值變?yōu)?false
C、認(rèn)證
啟動 Kerberos 客戶端,點(diǎn)擊 Get Ticket
輸入主體名和密碼,點(diǎn)擊OK,即可正常訪問Hadoop
注意點(diǎn):
Kerberos配置文件問題:Kerberos所有配置配件必須逐條檢查,按照實際業(yè)務(wù)配置
文件夾權(quán)限問題:由于實際啟動Hadoop服務(wù)時需要不同的用戶,因此用戶對于文件夾的訪問權(quán)限非常關(guān)鍵,必須配置好
踩坑:
- kadmin.local {本地登錄(無需認(rèn)證)}直接進(jìn)入后臺 kadmin是KDC數(shù)據(jù)庫的訪問入口
- kadmin {遠(yuǎn)程登錄(需要主體認(rèn)證)}
- listprincs 查看后臺用戶
- addprinc root/admin@EXAMPLE.COM
- server端進(jìn)行用戶的創(chuàng)建 kadmin.local -q"addprinc test"
- client端可以進(jìn)行用戶的 連接 kinit test 再輸入密碼 、klist查看
- 注意在client端,只能執(zhí)行kadmin
- 如果想要使用kerberos,就要用https進(jìn)行托管,給https創(chuàng)建一個kerberos賬戶
- 預(yù)計使用Kerberos的服務(wù):namenode\secondarynamenode\datanode\resourcemanager\nodemanager\job hostoryserver\https\hive
- jhs(MapReduce JobHistory Server)/HTTP/hive
- namenode會使用nn/ds01@EXAMPLE.COM賬戶來管理自己
- 想要namenode成功運(yùn)行,必須認(rèn)證賬戶后才可以操作namenode
以子用戶進(jìn)行kerberos的配置
以root用戶配置kerberos,但hadoop是dolphinscheduler用戶建立的,后續(xù)可能會出現(xiàn)問題
子用戶、root用戶等權(quán)限的問題
把hadoop的logs和data文件刪掉了,后續(xù)Kerberos配置也用到了這個路徑
改了配置文件的權(quán)限
問題+解決:
重建keystore文章來源:http://www.zghlxwxcb.cn/news/detail-758134.html
?
到了這里,關(guān)于Hadoop集成Kerberos安全服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!