kerberos系列之hdfs&yarn认证配置

仅以此篇记录虚拟机linux安装kerberos对hdfs&yarn认证配置的过程,以昨日后学习之用
本篇是为了安装kerberos对hdfs&yarn认证配置的过程,hadoop的集群安装hadoop集群配置已经涵盖不在此篇赘述。
希望读者可以通读全篇之后加上自己的理解然后参照进行配置。
本篇完全借鉴相关博主配置,在此基础上补充路径,添加配置等操作,更加详细以便日后配置学习之用,参考链接放到文章末尾。

一、hdfs配置kerberos认证

1.所有节点执行以下操作master、slave1、slave2

添加hdfs用户并修改hdfs的属组

groupadd hdfs
useradd hdfs -g hdfs
cat /etc/passwd
chown -R hdfs:hdfs /usr/local/hadoop-3.3.4/
image.png

slave1、slave2创建目录和修改属组


image.png
2、所有节点安装autoconf
yum install autoconf -y
3.所有节点安装gcc
yum install gcc -y
4.所有节点安装jsvc
tar -zxvf commons-daemon-1.2.2-src.tar.gz -C /usr/local
cd /usr/local/commons-daemon-1.2.2-src/src/native/unix
./support/buildconf.sh
./configure
make

#commons-daemon-1.2.2-src.tar.gz百度网盘链接
#链接:https://pan.baidu.com/s/15bb9UH_HIZk6CwnmnxNhog 
#提取码:PiZZ 
image.png

检查是否安装完成

cd /usr/local/commons-daemon-1.2.2-src/src/native/unix/
./jsvc -help
jsvc -help
ln -s /usr/local/commons-daemon-1.2.2-src/src/native/unix/jsvc /usr/local/bin/jsvc
5.修改hdfs-env.sh的配置文件

5.1进入hadoop路径下并修改文件

cd /usr/local/hadoop-3.3.4/etc/hadoop/
vi hadoop-env.sh 
vi hdfs-env.sh
#添加一下信息并保存退出
export JSVC_HOME=/usr/local/commons-daemon-1.2.2-src/src/native/unix
export HDFS_DATANODE_SECURE_USER=hdfs
hdfs-env.sh

5.2分发到其他节点

scp /usr/local/hadoop-3.3.4/etc/hadoop/hadoop-env.sh root@slave1:/usr/local/hadoop-3.3.4/etc/hadoop/hadoop-env.sh
scp /usr/local/hadoop-3.3.4/etc/hadoop/hadoop-env.sh root@slave2:/usr/local/hadoop-3.3.4/etc/hadoop/hadoop-env.sh

#或者可以登录slave1、slave2分别修改hdfs-env.sh 保存退出

5.3新增配置mapred-site.xml

cd /usr/local/hadoop-3.3.4/etc/hadoop/
vi mapred-site.xml 
image.png
<!--MapReduce 历史工作信息服务 IPC 地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <!--MapReduce 历史工作信息服务 Web 地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master:19888</value>
    </property>

5.4修改slave1、slave2节点配置

ssh slave1 
cd /usr/local/hadoop-3.3.4/etc/hadoop/
vi mapred-site.xml
#添加5.3中配置,并保存退出
exit

ssh slave2
cd /usr/local/hadoop-3.3.4/etc/hadoop/
vi mapred-site.xml
#添加5.3中配置,并保存退出
exit
slave1、slave2节点mapred-site.xml 修改
6.创建hdfs的principal

如果找不到kadmin.local命令,可以使用find / -name kadmin 来查找一般的位置为:/usr/bin/kadmin
6.1先输入kadmin.local,然后依次输入

addprinc hdfs/master
addprinc hdfs/slave1
addprinc hdfs/slave2
addprinc http/master
addprinc http/slave1
addprinc http/slave2
image.png

继续执行

ktadd -norandkey -k /etc/security/keytab/hdfs.keytab hdfs/master
ktadd -norandkey -k /etc/security/keytab/hdfs.keytab hdfs/slave1
ktadd -norandkey -k /etc/security/keytab/hdfs.keytab hdfs/slave2

ktadd -norandkey -k /etc/security/keytab/http.keytab http/master
ktadd -norandkey -k /etc/security/keytab/http.keytab http/slave1
ktadd -norandkey -k /etc/security/keytab/http.keytab http/slave2

6.2解决报错:如果执行第一个就报错,先看看图片别急着操作往下看


image.png

需要先进行文件夹的创建,先看有没有哈,没有的话再创建

mkdir /etc/security/keytab
image.png

执行完成后

#退出
exit

6.3合并keytab

ktutil
rkt hdfs.keytab    
rkt http.keytab
wkt hdfs.keytab  
exit
7.分发秘钥文件
scp hdfs.keytab http.keytab root@slave1:/usr/local/hadoop-3.3.4/etc/
scp hdfs.keytab http.keytab root@slave2:/usr/local/hadoop-3.3.4/etc/
8.修改hdfs的配置文件

8.1修改core-site.xml文件


core-site.xml
<property>
     <name>hadoop.security.authentication</name>
     <value>kerberos</value>
   </property>
   <property>
     <name>hadoop.security.authorization</name>
     <value>true</value>
   </property>

8.2修改修改hdfs-site.xml


image.png

image.png
<!--name名称解释
参考链接:https://blog.csdn.net/zhanglong_4444/article/details/99471502-->
    <!-- 当为true时,允许访问令牌访问datanode。 -->
    <property>
        <name>dfs.block.access.token.enable</name>
        <value>true</value>
    </property>
   <!--namenode服务主体。这通常设置为nn/_HOST@REALM.TLD。
        每个namenode将在启动时用它自己的完全限定主机名替换宿主。
         _HOST占位符允许在HA设置中使用两个namenode上相同的配置设置。-->
    <property>
        <name>dfs.namenode.kerberos.principal</name>
        <value>hdfs/master@HADOOP.COM</value>
    </property>
    <property>
        <name>dfs.namenode.keytab.file</name>
        <value>/usr/local/hadoop-3.3.4/etc/hdfs.keytab</value>
     </property>
     <property>
        <name>dfs.namenode.kerberos.internal.spnego.principal</name>
        <value>http/hadoop@HADOOP.COM</value>
     </property>
<property>
        <name>dfs.namenode.kerberos.internal.spnego.keytab</name>
        <value>http/master@HADOOP.COM</value>
     </property>
     <property>
        <name>dfs.web.authentication.kerberos.principal</name>
        <value>hdfs/master@HADOOP.COM</value>
     </property>
     <property>
        <name>dfs.web.authentication.kerberos.keytab</name>
        <value>/usr/local/hadoop-3.3.4/etc/hdfs.keytab</value>
     </property>

     <property>
        <name>dfs.datanode.kerberos.principal</name>
        <value>hdfs/master@HADOOP.COM</value>
     </property>
     <property>
        <name>dfs.datanode.keytab.file</name>
        <value>/usr/local/hadoop-3.3.4/etc/hdfs.keytab</value>
     </property>
     <property>
        <name>dfs.datanode.address</name>
        <value>0.0.0.0:1004</value>
     </property>
     <property>
        <name>dfs.datanode.http.address</name>
        <value>0.0.0.0:1006</value>
     </property>

如果有secondnamenode,则还需要加下面的配置


image.png
<property>
        <name>dfs.secondary.namenode.keytab.file</name>
        <value>/usr/local/hadoop-3.3.4/etc/hdfs.keytab</value>
     </property>
     <property>
        <name>dfs.secondary.namenode.kerberos.principal</name>
        <value>hdfs/master@HADOOP.COM</value>
     </property>

8.3修改yarn-site.xml


image.png
<property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
    </property>
#以上为参考博主补充的配置,以下为图片中的配置
<property>
        <name>yarn.resourcemanager.principal</name>
        <value>hdfs/master@HADOOP.COM</value>
    </property>
    <property>
        <name>yarn.resourcemanager.keytab</name>
        <value>/usr/local/hadoop-3.3.4/etc/hdfs.keytab</value>
    </property>
    <property>
        <name>yarn.nodemanager.keytab</name>
        <value>/usr/local/hadoop-3.3.4/etc/hdfs.keytab</value>
    </property>
    <property>
        <name>yarn.nodemanager.principal</name>
        <value>hdfs/master@HADOOP.COM</value>
    </property>

分发配置文件到其他节点


image.png
cd /usr/local/hadoop-3.3.4/etc/hadoop
scp core-site.xml hdfs-site.xml yarn-site.xml root@slave1:/usr/local/hadoop-3.3.4/etc/hadoop/
scp core-site.xml hdfs-site.xml yarn-site.xml root@slave2:/usr/local/hadoop-3.3.4/etc/hadoop/
9.启动hdfs

进入/usr/local/hadoop-3.3.4/sbin

cd /usr/local/hadoop-3.3.4/sbin
image.png

执行下面的脚本启动hdfs

start-dfs.sh

启动hdfs
可以看到图片中标红的。因为我都部署到了master节点,正常应该分开部署哈。这边也是一边学习一边工作中要用暂且这么配置
Root用户执行下面的脚本

./start-secure-dns.sh

检查进程,这里需要注意,jps是看不到datenode的进程的

ps auxf |grep datanode
10.验证
hdfs dfs -ls /
kinit -kt /etc/security/keytab/hdfs.keytab hdfs/master
hdfs dfs -ls /

二.配置yarn的kerberos认证

1.配置yarn-site.xml配置文件

进入/usr/local/hadoop-3.3.4/etc/hadoop

cd /usr/local/hadoop-3.3.4/etc/hadoop
image.png

修改yarn-site.xml


yarn-site.xml
<property>
        <name>yarn.nodemanager.container-executor.class</name>
        <value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>
    </property>
    <property>
        <name>yarn.nodemanager.linux-container-executor.group</name>
        <value>hadoop</value>
    </property>
    <property>
        <name>yarn.nodemanager.linux-container-executor.path</name>
        <value>/hdp/bin/container-executor</value>
    </property>
    <!--yarn.nodemanager.linux-container-executor.path指定了container-executor的路径,
        container-executor是可执行二进制文件,它需要一个配置文件:
        yarn.nodemanager.linux-container-executor.group是nodemanager的启动用户所属组-->
 <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>/hdp/yarn/local/nm-local-dir</value>
    </property>
    <property>
        <name>yarn.nodemanager.log-dirs</name>
        <value>/hdp/yarn/log/userlogs</value>
    </property>

yarn.nodemanager.linux-container-executor.path指定了container-executor的路径,container-executor是可执行二进制文件,它需要一个配置文件:
yarn.nodemanager.linux-container-executor.group是nodemanager的启动用户所属组

2.确认container-executor路径

进入/usr/local/hadoop-3.3.4/bin

cd /usr/local/hadoop-3.3.4/bin
strings container-executor |grep etc
image.png
3.创建目录,拷贝可执行文件和配置文件到指定目录
mkdir -p /hdp/bin
mkdir -p /hdp/etc/hadoop
scp /usr/local/hadoop-3.3.4/bin/container-executor /hdp/bin/
scp /usr/local/hadoop-3.3.4/etc/hadoop/container-executor.cfg /hdp/etc/hadoop/
#此处用cp就行 不非得用scp

进入到/hdp/etc/hadoop/

cd /hdp/etc/hadoop/

修改配置文件的内容如下


image.png
yarn.nodemanager.linux-container-executor.group=hadoop
banned.users=hdfs,yarn,mapred,bin
min.user.id=500
allowed.system.users=root
yarn.nodemanager.local-dirs=/hdp/yarn/local/nm-local-dir
yarn.nodemanager.log-dirs=/hdp/yarn/log/userlogs
4.修改可执行文件的属组

修改权限

chmod 6050 /hdp/bin/container-executor
ll /hdp/bin/container-executor
变红了
5.做如下检查,如果输出一致,则container-executor配置完成
hadoop checknative
/hdp/bin/container-executor --checksetup
image.png
6.拷贝hdp目录 到其他节点,需要设置相同的属组和权限
ssh slave1
mkdir -p /hdp/etc/hadoop
exit

ssh slave2
mkdir -p /hdp/etc/hadoop
exit

scp /hdp/etc/hadoop/container-executor.cfg root@slave1:/hdp/etc/hadoop/
scp /hdp/etc/hadoop/container-executor.cfg root@slave2:/hdp/etc/hadoop/
7.启动yarn

进入路径/usr/local/hadoop-3.3.4/sbin

cd /usr/local/hadoop-3.3.4/sbin
#启动yarn
./start-yarn.sh
8.验证yarn on kerberos配置完成,能正常执行即可

进入路径/usr/local/hadoop-3.3.4/

cd /usr/local/hadoop-3.3.4
./bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount
hdfs dfs -ls
#不报错有文件说明没问题

至此结束配置

以下为配置过程中遇到的错误。大家参考一下即可

三.报错解决

报错1:
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain
org.apache.hadoop.security.KerberosAuthException: failure to login: for principal: hdfs/master@HADOOP.COM from keytab /usr/local/hadoop-3.3.4/etc/hdfs.keytab javax.security.auth.login.LoginException: Unable to obtain password from user

#master、slave1、slave2都需要执行
chmod 777 /usr/local/hadoop-3.3.4/etc/hdfs.keytab 

报错2:
缺少libcrypto.so.1.1
https://www.jianshu.com/p/4f15ae32c5c8

报错3:这个是ticket过期之类的错误请参考
链接:https://www.ibm.com/docs/en/db2-big-sql/6.0?topic=security-kdc-cant-fulfill-requested-option-while-renewing-credentials-errors-when-running-db2-big-sql-statements-kerberized-cluster

kadmin.local -q "modprinc -maxrenewlife max_renewable_life_value krbtgt/HADOOP.COM"

modprinc -maxrenewlife "1 week" +allow_renewable hdfs/master@HADOOP.COM
modprinc -maxrenewlife "1 week" +allow_renewable hive/master@HADOOP.COM

报错4:执行chown root:hadoop container-executor报错 无效的组
添加hadoop组

groupadd hadoop
chown root:hadoop container-executor

报错5:
ERROR [main] service.CompositeService: Error starting services HiveServer2
java.lang.RuntimeException: Failed to init thrift server
解决链接https://blog.csdn.net/wangshuminjava/article/details/82462675

报错6:
2023-04-27 00:19:52,119 WARN security.UserGroupInformation: Exception encountered while running the renewal command for hive/master@HADOOP.COM. (TGT end time:1682500979000, renewalFailures: 0, renewalFailuresTotal: 1)
ExitCodeException exitCode=1: kinit: Ticket expired while renewing credentials
这个需要重新生成一下keytab然后传到对应位置上替换

报错7:
ERROR [HiveServer2-Handler-Pool: Thread-118] server.TThreadPoolServer: Error occurred during processing of message.
java.lang.RuntimeException: org.apache.thrift.transport.TTransportException: Peer indicated failure: GSS initiate failed
这个未解决,idea连接调试过程中出现的问题,我觉得通过kinit -kt重新验证应该能行

报错8:
Browse Directory
Failed to obtain user group information: java.io.IOException: Security enabled but user not authenticated by filter
前台访问master:9870报错,这个一直未解决,百度不到答案。可能是配置哪里的问题。

原文档中未出现的配置
添加container-executor.cfg配置,并赋予权限
yarn.nodemanager.local-dirs=/hdp/yarn/local/nm-local-dir
yarn.nodemanager.log-dirs=/hdp/yarn/log/userlogs

mkdir -p /hdp/yarn/local/nm-local-dir
mkdir -p /hdp/yarn/log/userlogs
chown yarn:hadoop /hdp/yarn/local/nm-local-dir
chown yarn:hadoop /hdp/yarn/log/userlogs
chmod 755 /hdp/yarn/local/nm-local-dir
chmod 755 /hdp/yarn/log/userlogs

后记说明

1.斜体:
斜体为需要读者注意的点,这边是还有未解决的问题。
2.加黑粗体:
强调注意事项。
3.补充知识
博主简单整理:https://www.cnblogs.com/chwilliam85/p/9679845.html
官方文档:https://web.mit.edu/kerberos/krb5-latest/doc/admin/database.html?highlight=addprinc#adding-modifying-and-deleting-principals

参考链接:https://www.cnblogs.com/bainianminguo/p/12548334.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容