Hadoop集成Kerberos安全服务器

这篇具有很好参考价值的文章主要介绍了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

这里主要注意hadoop kerberos,hadoop,大数据,分布式

hadoop kerberos,hadoop,大数据,分布式

初始化数据库

在服务端主机 (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 配置

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

hadoop kerberos,hadoop,大数据,分布式

 文章来源地址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

hadoop kerberos,hadoop,大数据,分布式

创建主体 

在所有节点创建 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 kerberos,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 特定路径访问权限

hadoop kerberos,hadoop,大数据,分布式

 

若上述路径不存在,需手动创建

创建 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 kerberos,hadoop,大数据,分布式

把hadoop的logs和data文件删掉了,后续Kerberos配置也用到了这个路径

改了配置文件的权限

问题+解决:

重建keystore

 

到了这里,关于Hadoop集成Kerberos安全服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用三台云服务器搭建hadoop完全分布式集群

    本次利用云服务器搭建Hadoop集群, 在开始之前,你需要3台云服务器,可以在同一家购买也可以在不同家购买。此次教程采用百度云产品,可以换不同账号新手免费试用几个月,具体配置如下: 服务器名称 配置 磁盘容量 master 2cpu 内存4GB 40G slave1 1cpu 内存2GB 60G slave2 1cpu 内存

    2024年02月04日
    浏览(20)
  • 阿里云服务器部署安装hadoop与elasticsearch踩坑笔记

    2023-09-12 14:00——2023.09.13 20:06 目录 00、软件版本 01、阿里云服务器部署hadoop 1.1、修改四个配置文件 1.1.1、core-site.xml 1.1.2、hdfs-site.xml 1.1.3、mapred-site.xml 1.1.4、yarn-site.xml 1.2、修改系统/etc/hosts文件与系统变量 1.2.1、修改主机名解析文件/etc/hosts 1.2.2、修改系统环境变量/etc/profil

    2024年02月08日
    浏览(16)
  • 华为云耀云服务器L实例-大数据学习-hadoop 正式部署

    产品官网: 云耀云服务器L实例 _【最新】_轻量云服务器_轻量服务器_轻量应用服务器-华为云 今天我们采用 可靠更安全、智能不卡顿、价优随心用、上手更简单、管理特省心 的 华为 云耀云服务器L实例 为例, 演示 单台服务器模拟配置hadoop集群 Hadoop 是一个开源的分布式存

    2024年02月02日
    浏览(27)
  • 在阿里云和腾讯云的轻量应用服务器上搭建Hadoop集群

    本文在两台2核2g的云服务器上搭建了Hadoop集群,两台云服务器分别是阿里云(hjm)和腾讯云(gyt),集群部署规划如下: hjm gyt HDFS NameNodeSecondaryNameNodeDataNode DataNode YARN ResourceManagerNodeManager NodeManager 经实验,目前可以正常实现文件上传下载,但跑mapreduce程序还出现服务器资

    2024年02月08日
    浏览(20)
  • hadoop集群中增加新节点服务器(DataNode + NodeManager)方案及验证

    现根据业务需要,需要在原有的3台完全分布式的集群(hadoop1、hadoop2、hadoop3仨节点)增设一台新的服务器节点(hadoop4),以下是在原有的完全分布式hadoop集群中增设新节点( DataNode + NodeManager )的部署步骤。 基础服务配置 hadoop4上依次执行以下步骤: 1)用户:重置root用户密

    2024年01月19日
    浏览(24)
  • Hadoop3.3.5云耀云服务器安装教程-单机/伪分布式配置

    华为云耀云服务器试用领取 领取的试用云耀云服务器在哪 阿里云服务器免费试用领取 Hadoop3.3.5云耀云服务器安装教程-单机/伪分布式配置 阿里云服务器ECS安装图形界面 本篇文章是基于上一篇所配置好的云服务器进行实验软件安装,该系列文章是根据林子雨所讲述的课程就在

    2024年01月21日
    浏览(32)
  • 三台异构服务器搭建hadoop HA集群史上最详细方案(HDFS+YARN)

     一、系统基础服务配置 主机名 IP 操作系统 CPU 内存 磁盘 Hive01 10.86.102.104 Centos 7.9.2009 Xeon 4208 X16 192G 46T Hive02 10.86.102.102 Centos 7.9.2009 Xeon 4208 X16 192G 46T Hive03 10.86.102.105 Centos 7.9.2009 Xeon 8260 X48 256G         11T 最终组成的是一个双副本56T的集群,设置YARN内存共400GB(可调) 3台服务

    2024年02月07日
    浏览(29)
  • 华为云云耀云服务器L实例评测|伪分布式环境下部署hadoop2.10.1

    #【中秋征文】程序人生,中秋共享# 这是Maynor创作的华为云云耀云服务器L实例测评的第二篇,上篇传送门: 华为云云耀云服务器L实例评测|单节点环境下部署ClickHouse21.1.9.41数据库 云耀云服务器L实例简介 ​ 云耀云服务器L实例 是新一代的轻量应用云服务器,专门为中小企业

    2024年02月07日
    浏览(17)
  • 大数据:Hadoop HDFS,基础架构,去中心化,中心化模式,HDFS基础架构,虚拟机和云服务器部署HDFS

    2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金融企业、安全机构啥的,他们必须要用oracle数据库 这oracle比sql安全,强大多了,所以你需要学

    2024年02月17日
    浏览(25)
  • hadoop之kerberos权限配置(ranger基础上)(三)

    上传kerberos安装包到/opt/rpm 安装:rpm -Uvh --force --nodeps *.rpm 修改配置:vi /var/kerberos/krb5kdc/kdc.conf 修改配置:vi /etc/krb5.conf 初始化数据库:/usr/sbin/kdb5_util create -s -r HADOOP.COM。密码设为:ffcsict1234!#% 查看生成文件:cd /var/kerberos/krb5kdc -- ls 创建数据库管理员:/usr/sbin/kadmin.local -q “

    2024年02月08日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包