Kerberos是一种认证机制,用于hadoop集群安全认证

1、安装

系统环境:centos6.8

集群主机: node1    node2    node3

软件包:

          

kerberos kinit命令 java_kerberos

下载地址:http://www.rpmfind.net //自己在这搜索上述包即可

离线安装

在主机node1执行

切记个--nodeps 这个参数,万恶之源,如果有其他服务依赖他会忽略 

像krb5-libs这个库,ssh服务就会依赖他,如果你卸载了,再退出会话,会导致ssh不能连接,如果非得加上这个参数,请务必多开几个会话,然后安装新版本。如果ssh不可用了只能服务器本地挂载u盘,再把这个包安装上

安装一个包:# rpm -ivh
升级一个包:# rpm -Uvh
移走一个包:# rpm -e

--replacepkgs 强制重新安装已经安装的软件包 
--replacefiles 替换属于其它软件包的文件 
--force 忽略软件包及文件的冲突
rpm -qa | grep krb5 #查看自带的krb5的包,有就卸载
rpm -e --nodeps krb5-workstation-1.10.3-57.el6.x86_64 # 卸载
rmp -ivh *.rpm #安装截图的rpm包,上图

# 看过上面红色字体注意,不推荐卸载,直接升级
rmp -Uvh *.rpm ,如果样不行加上替换文件或者替换包的参数

在线安装

yum -y install krb5-server krb5-libs krb5-auth-dialog krb5-workstation

2、配置

修改服务器端配置文件

vim /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 HADOOP.COM = {
  #master_key_type = aes256-cts
  max_life= 1d # cdh 要求非0,认证后缓存一天
  max_renewable_life= 7d 0h 0m 0s # 最大认证天数
  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 des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal # 加密方式,已经把aes256去掉了
 }

修改客户端文件

vim /etc/krb5.conf

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = HADOOP.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

# kdc 服务在node1,admin server数据库在node1
[realms]
 HADOOP.COM = {
  kdc = node1
  admin_server = node1
 }

# 暂时忘记了
[domain_realm]
 .hadoop.com = HADOOP.COM
 hadoop.com = HADOOP.COM

以如下结尾的都是管理员

vim /var/kerberos/krb5kdc/kadm5.acl
# 如下有2列
# 2种
# 1、用户名/(可以理解成组名)@域名  * 代表所有权限
# 2、服务名/主机名@域名 
*/admin@HADOOP.COM      *

3、启动数据库远程服务和kdc服务

# centos 6 启动
service krb5kdc start
service kadmin start

# 开机自启
chkconfig kadmin on
chkconfig krb5kdc on

# 创建Kerberos数据库,并设置密码
kdb5_util create -r HADOOP.COM -s

# 创建kerberos管理用户
kadmin.local #回车
addprinc admin/admin@HADOOP.COM

4、配置集群客户端

kerberos kinit命令 java_kerberos_02

上图包分发到node2和node3

rpm -qa|grep krb5 # 查看是否有旧版本kerberos,有就卸载
rpm -e --nodeps krb5-workstation-1.10.3-57.el6.x86_64
rpm -ivh krb5-libs-1.10.3-65.el6.x86_64.rpm # 安装
rpm -ivh libkadm5-1.10.3-65.el6.x86_64.rpm # 安装
rpm -ivh krb5-workstation-1.10.3-65.el6.x86_64.rpm # 安装
直接升级好了,把 ivh 换成 Uvh

把客户端文件分发到node2和node3

scp /etc/krb5.conf node2:/etc/
scp /etc/krb5.conf node3:/etc/

5、认证

认证方式有2种:密码和密钥文件

1、密码认证

#认证用户
kinit admin/admin@HADOOP.COM
#查看登陆缓存
klist

kerberos kinit命令 java_hive_03

kinit 可以在任何客户端执行认证,@HADOOP.COM可以不写,因为在配置文件我们配置了默认就是@HADOOP.COM

2、密钥文件认证

kadmin.local
# 生成密钥文件
xst -k /root/krb5.keytab admin/admin@HADOOP.COM
# 指定了密钥文件,就不可以用密码登陆了
kinit -k -t  /root/krb5.keytab   admin/admin@HADOOP.COM

======也可以这样写======
kadmin.local -q "xst -k /root/krb5.keytab admin/admin@HADOOP.COM"

kerberos kinit命令 java_kerberos_04

 

遇到的问题1:

cloudera manager6.2 开启kerberos遇到的问题

2020-01-14 17:55:35,693 ERROR org.apache.hadoop.mapred.ShuffleHandler: Shuffle error in populating headers :
java.io.IOException: Could not find usercache/hive/appcache/application_1578991874573_0006/output/attempt_1578991874573_0006_m_000000_1/file.out.index in any of the directories

我的这个错的原因是kerberos问题

删除datanode节点上/dta1(每台机器可能有多个,看你的配置)/cdh6/yarn/nm/usercache/下的文件,我的是这个路径,这个nm/usercache/大家是一样的

然后就好了

遇到的问题2:

Application application_1578991874573_0001 failed 2 times due to AM Container for appattempt_1578991874573_0001_000002 exited with exitCode: -1000
Failing this attempt.Diagnostics: [2020-01-14 17:11:14.285]Application application_1578991874573_0001 initialization failed (exitCode=255) with output: main : command provided 0
main : run as user is hive
main : requested yarn user is hive
Can't create directory /dta1/cdh6/yarn/nm/usercache/hive/appcache/application_1578991874573_0001 - Permission denied
Can't create directory /dta2/cdh6/yarn/nm/usercache/hive/appcache/application_1578991874573_0001 - Permission denied
Can't create directory /dta3/cdh6/yarn/nm/usercache/hive/appcache/application_1578991874573_0001 - Permission denied
Can't create directory /dta4/cdh6/yarn/nm/usercache/hive/appcache/application_1578991874573_0001 - Permission denied
Can't create directory /dta5/cdh6/yarn/nm/usercache/hive/appcache/application_1578991874573_0001 - Permission denied
Can't create directory /dta6/cdh6/yarn/nm/usercache/hive/appcache/application_1578991874573_0001 - Permission denied

网上好多说删除usercache下的文件即可,和我的第一个问题解决方式一样,不过我当时比较傻,是先给的权限,后来出了问题一的错误