公司里要给Hadoop配置Kerberos,记录一下过程中遇到的问题。
共有三台服务器:Hadoop102,Hadoop103,Hadoop104
Hadoop节点分布如下(后续配置Kerberos的一些文件夹时要严格按照自身Hadoop集群中的节点情况,我这里只是举个例子):
Hadoop102: DataNode, NameNode, ResourceManager, NodeManager
Hadoop103: DataNode, NodeManager, SecondaryNameNode
Hadoop104: DataNode, NodeManager
Kerberos部署
需要配置Kerberos服务端和客户端,我这里选择Hadoop102作为服务端
安装Kerberos服务
Hadoop102:
yum install -y krb5-server
Hadoop102,Hadoop103,Hadoop104都需要安装客户端:
yum install -y krb5-workstation krb5-libs
修改配置文件
接下来到了非常关键的步骤,修改配置文件
Hadoop102独有的/var/kerberos/krb5kdc/kdc.conf
修改如下内容
[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新导入一个包,这个坑不是我亲自踩的,网上找来的,因此不去验证它的有效性,不耽误后续操作。
三台服务器都有的 /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
这里主要注意
初始化数据库
在服务端主机 (hadoop102) 执行以下命令,并根据提示输入密码。
kdb5_util create -s
修改管理员权限配置文件
在服务端主机 (hadoop102) 修改 /var/kerberos/krb5kdc/kadm5.acl 文件,内容如下*/admin@HADOOP.COM *
启动 Kerberos 相关服务
在主节点 (hadoop102) 启动KDC,并配置开机自启
[root@hadoop102 ~]# systemctl start krb5kdc
[root@hadoop102 ~]# systemctl enable krb5kdc
在主节点 (hadoop102) 启动 Kadmin,该服务为 KDC 数据库访问入口
[root@hadoop102 ~]# systemctl start kadmin
[root@hadoop102 ~]# systemctl enable kadmin
创建 Kerberos 管理员用户
在 KDC 所在主机 (hadoop102),执行以下命令,并按照提示输入密码
[root@hadoop102 ~]# kadmin.local -q "addprinc admin/admin"
之后admin就作为KDC服务器的管理员,KDC的逻辑是这样的,如果输入如上命令,就会生成你自己设置密码的用户,而还有一种写法你自己不知道密码,随机密码,将密码文件写入/etc/security/krb5
Hadoop Kerberos 配置
注意:以下所有配置,如果没有指定是哪台服务器做的,例如如下开头,则需要在所有服务器上进行操作,并且注意配置文件的分发。
文章来源地址https://www.toymoban.com/news/detail-758134.html
创建 Hadoop 系统用户
为 Hadoop 开启 Kerberos,需为不同服务准备不同的用户,启动服务时需要使用相应的用户。
以下操作每台服务器都要做
创建hadoop组
groupadd hadoop
创建各用户并设置密码
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 各服务创建 Kerberos 主体
主体格式如下:ServiceName/HostName@REALM
,例如 dn/hadoop102@EXAMPLE.COM
各服务所需主体如下
环境:3台节点,主机名分别为hadoop102,hadoop103,hadoop104
创建主体
在所有节点创建 keytab 文件目录,这个keytab目录就是上面所说的存放你没有指定密码但是KDC服务自动生成密码的密码文件的所在目录,每台服务器都要运行
mkdir /etc/security/keytab/
chown -R root:hadoop /etc/security/keytab/
chmod 770 /etc/security/keytab/
以下命令在 hadoop102 节点执行
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 执行
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 执行
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"
修改所有节点 keytab 文件的所有者和访问权限
chown -R root:hadoop /etc/security/keytab/
chmod 660 /etc/security/keytab/*
修改 Hadoop 配置文件
需要修改的内容如下,修改完毕需要分发所改文件,建议在Hadoop102上修改之后通过scp -r Hadoop103/104:$PWD命令进行分发
core-site.xml
[root@hadoop102 ~]# vim /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
增加以下内容
<!-- Kerberos主体到系统用户的映射机制 -->
<property>
<name>hadoop.security.auth_to_local.mechanism</name>
<value>MIT</value>
</property>
<!-- Kerberos主体到系统用户的具体映射规则 -->
<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安全认证 -->
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<!-- 启用Hadoop集群授权管理 -->
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
<!-- Hadoop集群间RPC通讯设为仅认证模式 -->
<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
增加以下内容
<!-- 访问DataNode数据块时需通过Kerberos认证 -->
<property>
<name>dfs.block.access.token.enable</name>
<value>true</value>
</property>
<!-- NameNode服务的Kerberos主体,_HOST会自动解析为服务所在的主机名 -->
<property>
<name>dfs.namenode.kerberos.principal</name>
<value>nn/_HOST@EXAMPLE.COM</value>
</property>
<!-- NameNode服务的Kerberos密钥文件路径 -->
<property>
<name>dfs.namenode.keytab.file</name>
<value>/etc/security/keytab/nn.service.keytab</value>
</property>
<!-- Secondary NameNode服务的Kerberos主体 -->
<property>
<name>dfs.secondary.namenode.keytab.file</name>
<value>/etc/security/keytab/sn.service.keytab</value>
</property>
<!-- Secondary NameNode服务的Kerberos密钥文件路径 -->
<property>
<name>dfs.secondary.namenode.kerberos.principal</name>
<value>sn/_HOST@EXAMPLE.COM</value>
</property>
<!-- NameNode Web服务的Kerberos主体 -->
<property>
<name>dfs.namenode.kerberos.internal.spnego.principal</name>
<value>HTTP/_HOST@EXAMPLE.COM</value>
</property>
<!-- WebHDFS REST服务的Kerberos主体 -->
<property>
<name>dfs.web.authentication.kerberos.principal</name>
<value>HTTP/_HOST@EXAMPLE.COM</value>
</property>
<!-- Secondary NameNode Web UI服务的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服务的Kerberos主体 -->
<property>
<name>dfs.datanode.kerberos.principal</name>
<value>dn/_HOST@EXAMPLE.COM</value>
</property>
<!-- DataNode服务的Kerberos密钥文件路径 -->
<property>
<name>dfs.datanode.keytab.file</name>
<value>/etc/security/keytab/dn.service.keytab</value>
</property>
<!-- 配置NameNode Web UI 使用HTTPS协议 -->
<property>
<name>dfs.http.policy</name>
<value>HTTPS_ONLY</value>
</property>
<!-- 配置DataNode数据传输保护策略为仅认证模式 -->
<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
增加以下内容
<!-- Resource Manager 服务的Kerberos主体 -->
<property>
<name>yarn.resourcemanager.principal</name>
<value>rm/_HOST@EXAMPLE.COM</value>
</property>
<!-- Resource Manager 服务的Kerberos密钥文件 -->
<property>
<name>yarn.resourcemanager.keytab</name>
<value>/etc/security/keytab/rm.service.keytab</value>
</property>
<!-- Node Manager 服务的Kerberos主体 -->
<property>
<name>yarn.nodemanager.principal</name>
<value>nm/_HOST@EXAMPLE.COM</value>
</property>
<!-- Node Manager 服务的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
增加以下内容
<!-- 历史服务器的Kerberos主体 -->
<property>
<name>mapreduce.jobhistory.keytab</name>
<value>/etc/security/keytab/jhs.service.keytab</value>
</property>
<!-- 历史服务器的Kerberos密钥文件 -->
<property>
<name>mapreduce.jobhistory.principal</name>
<value>jhs/_HOST@EXAMPLE.COM</value>
</property>
配置HDFS使用 HTTPS 安全传输协议
生成 keystore 的密码及相应信息的密钥库
[root@hadoop102 ~]# keytool -keystore /etc/security/keytab/keystore -alias jetty -genkey -keyalg RSA
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]:
您的组织单位名称是什么?
[Unknown]:
您的组织名称是什么?
[Unknown]:
您所在的城市或区域名称是什么?
[Unknown]:
您所在的省/市/自治区名称是什么?
[Unknown]:
该单位的双字母国家/地区代码是什么?
[Unknown]:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?
[否]: y
输入 <jetty> 的密钥口令
(如果和密钥库口令相同, 按回车):
再次输入新口令:
修改 keystore文件的所有者和访问权限
[root@hadoop102 ~]# chown -R root:hadoop /etc/security/keytab/keystore
[root@hadoop102 ~]# chmod 660 /etc/security/keytab/keystore
将该证书分发到集群中的每台节点的相同路径
[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
修改以下内容
[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>
分发ssl-server.xml文件
[root@hadoop102 ~]# xsync $HADOOP_HOME/etc/hadoop/ssl-server.xml
配置 Yarn 使用 LinuxContainerExecutor
修改所有节点的container-executor所有者和权限
要求其所有者为 root,所有组为 hadoop (启动 NodeManger 的 yarn 用户的所属组),权限为 6050。其默认路径为 $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
修改所有节点的 container-executor.cfg文件的所有者和权限
要求该文件及其所有的上级目录的所有者均为 root,所有组为 hadoop(启动NodeManger 的 yarn 用户的所属组),权限为 400。其默认路径为$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
内容如下
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
增加以下内容
<!-- 配置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>
分发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 集群
修改特定本地路径权限
$HADOOP_LOG_DIR (所有节点)
该变量位于 hadoop-env.sh
文件,默认值为 ${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节点)
该参数位于 hdfs-site.xml 文件,默认值为 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节点)
该参数为于 hdfs-site.xml 文件,默认值为 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节点)
该参数位于 hdfs-site.xml 文件,默认值为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节点)
该参数位于yarn-site.xml文件,默认值为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节点)
该参数位于 yarn-site.xml 文件,默认值为 $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
需要注意的是,启动不同服务时需要使用对应的用户
(1)在主节点 (hadoop102) 配置hdfs用户到所有节点的免密登录。
(2)修改主节点 (hadoop102) 节点的$HADOOP_HOME/sbin/start-dfs.sh
脚本,在顶部增加以下环境变量。
[root@hadoop102 ~]# vim $HADOOP_HOME/sbin/start-dfs.sh
在顶部增加如下内容
HDFS_DATANODE_USER=hdfs
HDFS_NAMENODE_USER=hdfs
HDFS_SECONDARYNAMENODE_USER=hdfs
注:$HADOOP_HOME/sbin/stop-dfs.sh
也需在顶部增加上述环境变量才可使用。
以 root 用户执行群起脚本,即可启动 HDFS 集群。
[root@hadoop102 ~]# start-dfs.sh
查看HFDS web页面
访问地址为https://hadoop102:9871
修改 HDFS 特定路径访问权限
若上述路径不存在,需手动创建
创建 hdfs/hadoop 主体,执行以下命令并按照提示输入密码
[root@hadoop102 ~]# kadmin.local -q "addprinc hdfs/hadoop"
认证 hdfs/hadoop 主体,执行以下命令并按照提示输入密码
[root@hadoop102 ~]# kinit hdfs/hadoop
按照上述要求修改指定路径的所有者和权限
修改/、/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
参数 yarn.nodemanager.remote-app-log-dir 位于 yarn-site.xml 文件,默认值 /tmp/logs
[root@hadoop102 ~]# hadoop fs -chown yarn:hadoop /tmp/logs
[root@hadoop102 ~]# hadoop fs -chmod 1777 /tmp/logs
参数 mapreduce.jobhistory.intermediate-done-dir 位于 mapred-site.xm l文件,默认值为 /tmp/hadoop-yarn/staging/history/done_intermediate,需保证该路径的所有上级目录(除/tmp) 的所有者均为mapred,所属组为hadoop,权限为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/
参数 mapreduce.jobhistory.done-dir 位于 mapred-site.xml 文件,默认值为 /tmp/hadoop-yarn/staging/history/done ,需保证该路径的所有上级目录 (除/tmp) 的所有者均为 mapred,所属组为 hadoop,权限为 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主节点 (hadoop103) 配置 yarn 用户到所有节点的免密登录。
(2) 修改主节点 (hadoop103) 的 $HADOOP_HOME/sbin/start-yarn.sh
,在顶部增加以下环境变量。
[root@hadoop103 ~]# vim $HADOOP_HOME/sbin/start-yarn.sh
在顶部增加如下内容
YARN_RESOURCEMANAGER_USER=yarn
YARN_NODEMANAGER_USER=yarn
注:stop-yarn.sh也需在顶部增加上述环境变量才可使用。
以 root 用户执行 $HADOOP_HOME/sbin/start-yarn.sh
脚本即可启动yarn集群。
[root@hadoop103 ~]# start-yarn.sh
访问 Yarn web 页面
访问地址为 http://hadoop103:8088
启动 HistoryServer
启动历史服务器
[root@hadoop102 ~]# sudo -i -u mapred mapred --daemon start historyserver
查看历史服务器 web 页面
访问地址为 http://hadoop102:19888
安全集群使用
具体要求
以下使用说明均基于普通用户,安全集群对用户有以下要求:
- 集群中的每个节点都需要创建该用户
- 该用户需要属于hadoop用户组
- 需要创建该用户对应的Kerberos主体
此处以 fancy 用户为例,具体操作如下
创建用户 (存在可跳过),须在所有节点执行
useradd fancy
echo fancy | passwd --stdin fancy
加入 hadoop 组,须在所有节点执行
usermod -a -G hadoop fancy
创建主体
kadmin -p admin/admin -wadmin -q"addprinc -pw fancy fancy"
Shell 命令
A、认证
[fancy@hadoop102 ~]$ kinit fancy
B、查看当前认证用户
[fancy@hadoop102 ~]$ kinit fancy
C、执行命令
[fancy@hadoop102 ~]$ hadoop fs -ls /
D、注销认证
[fancy@hadoop102 ~]$ kdestroy
E、再次执行查看命令
[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 文件,内容如下
[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” ,点击回车
搜索 “network.negotiate-auth.trusted-uris” ,修改值为要访问的主机名(hadoop102)
搜索 “network.auth.use-sspi”,双击将值变为 false
C、认证
启动 Kerberos 客户端,点击 Get Ticket
输入主体名和密码,点击OK,即可正常访问Hadoop
注意点:
Kerberos配置文件问题:Kerberos所有配置配件必须逐条检查,按照实际业务配置
文件夹权限问题:由于实际启动Hadoop服务时需要不同的用户,因此用户对于文件夹的访问权限非常关键,必须配置好
踩坑:
- kadmin.local {本地登录(无需认证)}直接进入后台 kadmin是KDC数据库的访问入口
- kadmin {远程登录(需要主体认证)}
- listprincs 查看后台用户
- addprinc root/admin@EXAMPLE.COM
- server端进行用户的创建 kadmin.local -q"addprinc test"
- client端可以进行用户的 连接 kinit test 再输入密码 、klist查看
- 注意在client端,只能执行kadmin
- 如果想要使用kerberos,就要用https进行托管,给https创建一个kerberos账户
- 预计使用Kerberos的服务:namenode\secondarynamenode\datanode\resourcemanager\nodemanager\job hostoryserver\https\hive
- jhs(MapReduce JobHistory Server)/HTTP/hive
- namenode会使用nn/ds01@EXAMPLE.COM账户来管理自己
- 想要namenode成功运行,必须认证账户后才可以操作namenode
以子用户进行kerberos的配置
以root用户配置kerberos,但hadoop是dolphinscheduler用户建立的,后续可能会出现问题
子用户、root用户等权限的问题
把hadoop的logs和data文件删掉了,后续Kerberos配置也用到了这个路径
改了配置文件的权限
问题+解决:
重建keystore文章来源:https://www.toymoban.com/news/detail-758134.html
到了这里,关于Hadoop集成Kerberos安全服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!