hadoop生态的kerberos认证系列2-hadoop

  • 一、准备工作
  • 二、配置
    • 1.hdfs配置kerberos认证
      • 1.1所有节点安装autoconf
      • 1.2所有节点安装gcc
      • 1.3安装jsvc
      • 1.4修改hadoop-env.sh的配置文件
      • 1.5创建凭证
      • 1.6修改hdfs的配置文件
        • 1.6.1修改core-site.xml文件
        • 1.6.2修改hdfs-site.xml
        • 1.6.3修改yarn-site.xml
      • 1.7启动hdfs
        • 1.7.1验证hdfs的kerberos
      • 1.8配置yarn的kerberos认证
        • 1.8.1配置yarn-site.xml配置文件
        • 1.8.2确认container-executor路径
        • 1.8.3创建目录,拷贝可执行文件和配置文件到指定目录
        • 1.8.4做如下检查,如果输出一致,则container-executor配置完成
      • 1.9启动yarn
        • 1.9.1yarn on kerberos配置完成
      • 1.10配置Yarn HistoryServer
        • 1.10.1修改mapred-site.xml
        • 1.10.2启动验证

一、准备工作

停掉hadoop集群;
安装好kerberos认证服务;

二、配置

注意:hadoop全部生态集群中,若要配置kerberos认证,则hadoop的kerberos认证必须先配置好,否则先配置其他集群的会出现问题,如:不配置hadoop的kerberos,先配置hive的kerberos认证的话,在配置过程没问题的情况下,beeline连接时会报错,提示不支持kerberos认证,究其原因就是hadoop的kerberos还没配置好

笔者当时弄hive的四种认证时研究kerberos就因为这个卡了好久,而且网上没有找到有任何资料提及要先弄hadoop的kerberos认证,最终是同事拉取了源码,从源码中扒到了错误提示的相关信息,才发现要先实现hadoop的kerberos认证,望吸取教训

本文以单机为例:节点名为node,集群差别不大,只要所有节点配置统一、凭证区别开即可

1.hdfs配置kerberos认证

1.1所有节点安装autoconf

yum install autoconf -y

1.2所有节点安装gcc

yum install gcc -y

1.3安装jsvc

下载地址:
http://commons.apache.org/proper/commonsdaemon/download_daemon.cgi

本文下载的安装包为commons-daemon-1.2.3-src.tar.gz,最好是对应好hadoop的版本等

安装参考:http://commons.apache.org/proper/commons-daemon/jsvc.html

下载好并上传到虚机后,解压安装包:

tar -zxvf commons-daemon-1.2.3-src.tar.gz

进入到目录commons-daemon-1.0.15-src/src/native/unix中,依次执行以下命令:

./support/buildconf.sh
./configure
make

检查是否安装完成:

[root@node unix]# ./jsvc -help
Usage: jsvc [-options] class [args...]Where options include:-help | --help | -?show this help page (implies -nodetach)-jvm <JVM name>use a specific Java Virtual Machine. Available JVMs:'server'-clientuse a client Java Virtual Machine.-serveruse a server Java Virtual Machine.
......
省略部分输出,节省空间
......--enable-previewJava 11 --enable-preview option. Passed as it is to JVMjsvc (Apache Commons Daemon) 1.2.3
Copyright (c) 1999-2020 Apache Software Foundation.[root@node unix]#

1.4修改hadoop-env.sh的配置文件

添加以下内容:

export HADOOP_SECURE_DN_USER=root
export JSVC_HOME=/usr/local/software/jsvc/commons-daemon-1.2.3-src/src/native/unix

1.5创建凭证

进入kdc的本地管理员模式kadmin.local

#创建凭证
kadmin.local:  addprinc hadoop/node
kadmin.local:  addprinc http/node#导出密钥
kadmin.local:  ktadd -norandkey -k /usr/data/kerberos/keytab/root.keytab root/node
kadmin.local:  ktadd -norandkey -k /usr/data/kerberos/keytab/root.keytab hadoop/node
kadmin.local:  ktadd -norandkey -k /usr/data/kerberos/keytab/root.keytab http/node

1.6修改hdfs的配置文件

1.6.1修改core-site.xml文件

添加如下内容:

<!-- 为之后的操作添加用户组和用户 --><property><name>hadoop.proxyuser.root.groups</name><value>*</value><description>Allow the superuser oozie to impersonate any members of the group group1 and group2</description></property><property><name>hadoop.proxyuser.root.hosts</name><value>*</value><description>The superuser can connect only from host1 and host2 to impersonate a user</description></property><property><name>hadoop.proxyuser.hadoop.groups</name><value>*</value><description>Allow the superuser oozie to impersonate any members of the group group1 and group2</description></property><property><name>hadoop.proxyuser.hadoop.hosts</name><value>*</value><description>The superuser can connect only from host1 and host2 to impersonate a user</description></property><property><name>hadoop.proxyuser.hbase.groups</name><value>*</value><description>Allow the superuser oozie to impersonate any members of the group group1 and group2</description></property><property><name>hadoop.proxyuser.hbase.hosts</name><value>*</value><description>The superuser can connect only from host1 and host2 to impersonate a user</description></property><property><name>hadoop.proxyuser.hive.groups</name><value>*</value><description>Allow the superuser oozie to impersonate any members of the group group1 and group2</description></property><property><name>hadoop.proxyuser.hive.hosts</name><value>*</value><description>The superuser can connect only from host1 and host2 to impersonate a user</description></property><property><name>hadoop.proxyuser.zookeeper.groups</name><value>*</value><description>Allow the superuser oozie to impersonate any members of the group group1 and group2</description></property><property><name>hadoop.proxyuser.zookeeper.hosts</name><value>*</value><description>The superuser can connect only from host1 and host2 to impersonate a user</description></property><!-- 添加kerberos认证 --><property><name>hadoop.security.authentication</name><value>kerberos</value></property><property><name>hadoop.security.authorization</name><value>true</value></property>

1.6.2修改hdfs-site.xml

添加如下内容:

<!-- General HDFS security config -->
<property><name>dfs.block.access.token.enable</name><value>true</value>
</property><!-- NameNode security config -->
<property><name>dfs.namenode.kerberos.principal</name><value>root/_HOST@EXAMPLE.COM</value>
</property>
<property><name>dfs.namenode.keytab.file</name><value>/usr/data/kerberos/keytab/root.keytab</value>
</property>
<property><name>dfs.namenode.kerberos.internal.spnego.principal</name><value>http/_HOST@EXAMPLE.COM</value>
</property>
<property><name>dfs.namenode.kerberos.internal.spnego.keytab</name><value>/usr/data/kerberos/keytab/root.keytab</value>
</property>
<property><name>dfs.namenode.kerberos.https.principal</name><value>root/_HOST@EXAMPLE.COM</value>
</property><property><name>dfs.web.authentication.kerberos.principal</name><value>http/_HOST@EXAMPLE.COM</value>
</property>
<property><name>dfs.web.authentication.kerberos.keytab</name><value>/usr/data/kerberos/keytab/root.keytab</value>
</property><!-- DataNode security config -->
<property><name>dfs.datanode.kerberos.principal</name><value>root/_HOST@EXAMPLE.COM</value>
</property>
<property><name>dfs.datanode.keytab.file</name><value>/usr/data/kerberos/keytab/root.keytab</value>
</property>
<property><name>dfs.datanode.kerberos.https.principal</name><value>root/_HOST@EXAMPLE.COM</value>
</property>
<property><name>dfs.http.address</name><value>0.0.0.0:50070</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><!-- Secondary NameNode security config -->
<property><name>dfs.secondary.namenode.keytab.file</name><value>/usr/data/kerberos/keytab/root.keytab</value>
</property>
<property><name>dfs.secondary.namenode.kerberos.principal</name><value>root/_HOST@EXAMPLE.COM</value>
</property>
<property><name>dfs.secondary.namenode.kerberos.https.principal</name><value>root/_HOST@EXAMPLE.COM</value>
</property>

1.6.3修改yarn-site.xml

添加如下内容:

<property><name>yarn.resourcemanager.principal</name><value>root/_HOST@EXAMPLE.COM</value>
</property>
<property><name>yarn.resourcemanager.keytab</name><value>/usr/data/kerberos/keytab/root.keytab</value>
</property>
<property><name>yarn.nodemanager.keytab</name><value>/usr/data/kerberos/keytab/root.keytab</value>
</property>
<property><name>yarn.nodemanager.principal</name><value>root/_HOST@EXAMPLE.COM</value>
</property>

1.7启动hdfs

可以用liunx其他用户启动start-dfs.sh
Root用户执行下面的脚本start-secure-dns.sh
之后用jps可以看到datanode被Secur所替代,如下(以下是启动了hadoop集群所有服务后的显示,正常只启动hdfs和zookeeper的话,只有NameNode、Secur 、SecondaryNameNode、QuorumPeerMain 四个):

[root@node hadoop]# jps
94561 HMaster
2830 NameNode #nn
82193 RunJar
92176 RunJar
94711 HRegionServer
3352 ResourceManager
34104 QuorumPeerMain #zk
4314 RunJar
3228 Secur #即代表了datanode
2973 SecondaryNameNode #snn
3583 NodeManager
6879 JobHistoryServer
106974 Jps

1.7.1验证hdfs的kerberos

[root@node hadoop]# hdfs dfs -ls /
20/12/23 19:45:48 WARN ipc.Client: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
ls: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]; Host Details : local host is: "node/192.168.88.129"; destination host is: "node":9000;
[root@node hadoop]# kinit -kt /usr/data/kerberos/keytab/root.keytab root/node
[root@node hadoop]# hdfs dfs -ls /
Found 5 items
drwx------   - root   supergroup          0 2020-12-23 10:02 /hbase
drwxr-xr-x   - root   supergroup          0 2020-12-16 16:39 /kylin
drwxrwx---   - root   supergroup          0 2020-12-22 15:47 /tmp
drwx--x--x   - root   supergroup          0 2020-12-16 15:33 /user
drwx-wx-wx   - hadoop supergroup          0 2020-12-09 15:53 /usr
[root@node hadoop]#

成功

1.8配置yarn的kerberos认证

注意:此处配置参考别人文章,但最后发现这个根本没用,配置了后跑不起来,但具体也不清楚到底哪里不用配置,猜测是1.8所有都不用配置(1.8.1确认过去掉配置后可以成功,即1.8.1已确认无需配置)

1.8.1配置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>root</value>
</property>
<property><name>yarn.nodemanager.linux-container-executor.path</name><value>/usr/local/hadoop/hadoop-2.7.4/bin/container-executor</value>
</property>

yarn.nodemanager.linux-container-executor.path指定了container-executor的路径,container-executor是可执行二进制文件

yarn.nodemanager.linux-container-executor.group是nodemanager的启动用户所属组

1.8.2确认container-executor路径

[root@node hadoop]# cd /usr/local/hadoop/hadoop-2.7.4/bin/
[root@node bin]# ll
总用量 324
-rwxr-xr-x. 1 root root 111795 8月   1 2017 container-executor
-rwxr-xr-x. 1 root root   6488 8月   1 2017 hadoop
-rwxr-xr-x. 1 root root   8786 8月   1 2017 hadoop.cmd
-rwxr-xr-x. 1 root root  12223 8月   1 2017 hdfs
-rwxr-xr-x. 1 root root   7478 8月   1 2017 hdfs.cmd
-rwxr-xr-x. 1 root root   5953 8月   1 2017 mapred
-rwxr-xr-x. 1 root root   6310 8月   1 2017 mapred.cmd
-rwxr-xr-x. 1 root root   1776 8月   1 2017 rcc
-rwxr-xr-x. 1 root root 125103 8月   1 2017 test-container-executor
-rwxr-xr-x. 1 root root  13352 8月   1 2017 yarn
-rwxr-xr-x. 1 root root  11386 8月   1 2017 yarn.cmd
[root@node bin]#

1.8.3创建目录,拷贝可执行文件和配置文件到指定目录

[root@node /]# mkdir -p /hdp/bin
[root@node /]# mkdir -p /hdp/etc/hadoop
[root@node /]# scp /usr/local/hadoop/hadoop-2.7.4/bin/container-executor /hdp/bin/
[root@node /]# scp /usr/local/hadoop/hadoop-2.7.4/etc/hadoop/container-executor.cfg /hdp/etc/hadoop/

vi /hdp/etc/hadoop/container-executor.cfg,加入以下内容:

yarn.nodemanager.linux-container-executor.group=root
#configured value of yarn.nodemanager.linux-container-executor.group
banned.users=mysql
#comma separated list of users who can not run applications
min.user.id=1000
#Prevent other super-users
allowed.system.users=root
##comma separated list of system users who CAN run applications

1.8.4做如下检查,如果输出一致,则container-executor配置完成

[root@node hadoop]# hadoop checknative
20/03/03 20:29:41 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version
20/03/03 20:29:41 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop:  true /usr/local/hadoop/lib/native/libhadoop.so.1.0.0
zlib:    true /lib64/libz.so.1
snappy:  true /lib64/libsnappy.so.1
lz4:     true revision:99
bzip2:   false
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
[root@node  hadoop]# /hdp/bin/container-executor --checksetup
[root@node  hadoop]#

1.9启动yarn

start-yarn.sh
再用jps看一下进程,应该多了NodeManager、ResourceManager两个:

[root@node hadoop]# jps
94561 HMaster
2830 NameNode #nn、hdfs
82193 RunJar
92176 RunJar
94711 HRegionServer
3352 ResourceManager #yarn
34104 QuorumPeerMain #zk
4314 RunJar
3228 Secur #即代表了datanode、hdfs
2973 SecondaryNameNode #snn、hdfs
3583 NodeManager #yarn
6879 JobHistoryServer
106974 Jps

1.9.1yarn on kerberos配置完成

能正常执行即可

[root@node hadoop]# ./bin/hadoop jar /usr/local/hadoop/hadoop-2.7.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /input /output

输出如下:

[root@node hadoop]# hdfs dfs -ls /output
Found 2 items
-rw-r--r--   2 hdfs supergroup          0 2020-03-03 21:40 /output/_SUCCESS
-rw-r--r--   2 hdfs supergroup

1.10配置Yarn HistoryServer

1.10.1修改mapred-site.xml

<property><name>mapreduce.jobhistory.keytab</name><value>/usr/data/kerberos/keytab/root.keytab</value>
</property>
<property><name>mapreduce.jobhistory.principal</name><value>root/_HOST@EXAMPLE.COM</value>
</property>
</configuration>

1.10.2启动验证

能正常启动即可:
mr-jobhistory-daemon.sh start historyserver
再用jps查看:

[root@node hadoop]# jps
94561 HMaster
2830 NameNode #nn、hdfs
82193 RunJar
92176 RunJar
94711 HRegionServer
3352 ResourceManager #yarn
34104 QuorumPeerMain #zk
4314 RunJar
3228 Secur #即代表了datanode、hdfs
2973 SecondaryNameNode #snn、hdfs
3583 NodeManager #yarn
6879 JobHistoryServer #HistoryServer、yarn
106974 Jps

hadoop生态的kerberos认证系列2-hadoop相关推荐

  1. 配置两个Hadoop集群Kerberos认证跨域互信(两个集群互通)

    配置两个Hadoop集群Kerberos认证跨域互信 两个Hadoop集群开启Kerberos验证后,集群间不能够相互访问,需要实现Kerberos之间的互信,使用Hadoop集群A的客户端访问Had ...

  2. hadoop KerberosUtil 做Kerberos认证

    网上找了一下,自己写了个KerberosUtil工具类,测试过可以用. 注意这个不是 org.apache.hadoop.security.authentication.util.KerberosUt ...

  3. kerberos mysql配置_CDH安装之篇四:启用Kerberos认证

    启用Kerberos认证 •          安装Kerberos •          安装配置master KDC/Kerberos Server 注:Kerberos Server可以是任意一 ...

  4. hadoop java client_hadoop3 Java client客户端kerberos认证

    hadoop集群升级hadoop3,并需要Kerberos认证,hadoop3代码包做了合并,引用jar包如下: org.apache.hadoop hadoop-hdfs 3.1.1 org.apa ...

  5. Java代码使用Spark on Yarn 方式提交任务到带Kerberos认证的Hadoop集群

    2019独角兽企业重金招聘Python工程师标准>>> 项目中遇到Spark Yarn方式提交到Hadoop集群,访问集群HDFS时发现使用的当前用户,没有访问权限,经过排查后发现H ...

  6. Hadoop平台安全机制Kerberos认证

    日前笔者在使用flume采集数据直接入到Hadoop平台HDFS上时,由于Hadoop平台采用了Kerberos认证机制.flume配置上是致辞kerberos认证的,但由于flume要采集的节点并不 ...

  7. Hadoop集群的kerberos认证

    文章转载自http://www.cnblogs.com/easycloud/p/3724437.html 转载主要用于个人学习备查. 环境: OS 版本: Centos6.4 Kerberos版本: ...

  8. Hadoop 生态系列之 Mapreduce

    阅读文本大概需要 5 分钟.文章稍长,建议收藏慢慢看. 目前 Hadoop 系列文章的规划就是这样,持续补充完善中- 同时可以访问 https://data.cuteximi.com Hadoop 生 ...

  9. Hadoop 生态系列之 HDFS

    目前 Hadoop 系列文章的规划就是这样,持续补充完善中... 同时可以访问 :https://data.cuteximi.com Hadoop 生态系列之1.0和2.0架构 Hadoop 生态系列 ...

最新文章

  1. Elasticsearch--建议器
  2. Redis 集群分布式锁与 API 网关分布式限流
  3. Windows Phone 7 自适应键盘输入
  4. 英国-新加坡联合博士奖学金(人工智能、数字医疗方向)
  5. Django之modelform
  6. php是属于什么软件,.php是什么软件?
  7. 设置360极速浏览器的模式默认为极速模式
  8. 赵玉海:科技部已组织专家编制中国云
  9. WTS_ERAL_年假生成规则
  10. 【noip模拟题】华尔街的秘密
  11. 清子指弹FC吉他五重奏nes《最终幻想1 》地图音乐步行 (FC游戏音乐)
  12. 基于WordPress建个人博客
  13. docker-compose配置固定网段Pool overlaps with other one on this address space
  14. 你想要的WinForm界面开发教程在这里 - 如何使用自定义用户控件
  15. iOS App上架遇到的错误(ERRORITMS-90096: )
  16. 筷云解读企业上云:为什么上云?选什么上云?
  17. 高通量测序的数据处理与分析指北(一)_network
  18. 三维点云语义分割模型介绍
  19. Numpy库基础知识与常用方法
  20. 夏季来临,警惕蜱虫叮咬感染疾病——莱姆病

热门文章

  1. 国内工业级3D打印机品牌的应用领域拓展
  2. 周杰伦《11月的萧邦》夜曲歌词
  3. QT软件如何设置为护眼配色
  4. while循环语句 while-do-done
  5. 【微信公众号】3. 后台管理功能简介
  6. 前端基本功(三):javascript中让人脑壳疼的this关键字
  7. 车辆租赁保险市场现状及未来发展趋势
  8. kbengine单服万人压力测试
  9. (初中数学)2018网校新初一初二初三数学年卡尖子班(全国人教版)
  10. 全国大学生数学建模竞赛【高教杯】- 竞赛题目汇总