0


Hadoop集成Kerberos安全服务器

公司里要给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 文件,内容如下

*/[email protected] *

启动 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 配置

注意:以下所有配置,如果没有指定是哪台服务器做的,例如如下开头,则需要在所有服务器上进行操作,并且注意配置文件的分发。

创建 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/[email protected]

各服务所需主体如下

环境: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/[email protected]</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/[email protected]</value>
</property>

<!-- NameNode Web服务的Kerberos主体 -->
<property>
  <name>dfs.namenode.kerberos.internal.spnego.principal</name>
  <value>HTTP/[email protected]</value>
</property>

<!-- WebHDFS REST服务的Kerberos主体 -->
<property>
  <name>dfs.web.authentication.kerberos.principal</name>
  <value>HTTP/[email protected]</value>
</property>

<!-- Secondary NameNode Web UI服务的Kerberos主体 -->
<property>
  <name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name>
  <value>HTTP/[email protected]</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/[email protected]</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/[email protected]</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/[email protected]</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/[email protected]</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://blog.csdn.net/qq_43541182/article/details/129303851
版权归原作者 timeVster 所有, 如有侵权,请联系我们删除。

“Hadoop集成Kerberos安全服务器”的评论:

还没有评论