第1章 概述
Hadoop启用Kerberos安全认证之后,之前的非安全环境下的全流程调度脚本和即席查询引擎均会遇到认证问题,故需要对其进行改进。
第2章 数仓全流程
2.1 改动说明
此处统一将数仓的全部数据资源的所有者设为hive用户,全流程的每步操作均认证为hive用户。
2.2 改动实操
2.2.1 用户准备
1.在各节点创建hive用户,如已存在则跳过
[root@hadoop102 ~]# useradd hive -g hadoop
[root@hadoop102 ~]# echo hive | passwd --stdin hive
[root@hadoop103 ~]# useradd hive -g hadoop
[root@hadoop103 ~]# echo hive | passwd --stdin hive
[root@hadoop104 ~]# useradd hive -g hadoop
[root@hadoop104 ~]# echo hive | passwd --stdin hive
2.为hive用户创建Keberos主体
1)创建主体
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey hive"
2)生成keytab文件
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/hive.keytab hive"
3)修改keytab文件所有者和访问权限
[root@hadoop102 ~]# chown hive:hadoop /etc/security/keytab/hive.keytab
[root@hadoop102 ~]#chmod 440 /etc/security/keytab/hive.keytab
4)分发keytab文件
[root@hadoop102 ~]#xsync /etc/security/keytab/hive.keytab
2.2.2 数据采集通道修改
1.用户行为日志
修改/opt/module/flume/conf/kafka-flume-hdfs.conf配置文件,增加以下参数
[root@hadoop104 ~]# vim /opt/module/flume/conf/kafka-flume-hdfs.conf
a1.sinks.k1.hdfs.kerberosPrincipal=hive@EXAMPLE.COM
a1.sinks.k1.hdfs.kerberosKeytab=/etc/security/keytab/hive.keytab
2.业务数据
修改sqoop每日同步脚本/home/seen/bin/mysql_to_hdfs.sh,
[root@hadoop102 ~]# vim /home/seen/bin/mysql_to_hdfs.sh
在顶部增加如下认证语句
kinit -kt /etc/security/keytab/hive.keytab hive
2.2.3 数仓各层脚本修改
数仓各层脚本均需在顶部加入如下认证语句
kinit -kt /etc/security/keytab/hive.keytab hive
修改语句如下
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' hdfs_to_ods_log.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' hdfs_to_ods_db.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' ods_to_dwd_log.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' ods_to_dim_db.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' ods_to_dwd_db.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' dwd_to_dws.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' dws_to_dwt.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' dwt_to_ads.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' hdfs_to_mysql.sh
注:sed-i '1 a text' file
表示将text内容加入到file文件的第1行之后
2.2.4 修改HDFS特定路径所有者
1.认证为hdfs用户,执行以下命令并按提示输入密码
[root@hadoop102 ~]# kinit hdfs/hadoop
2.修改数据采集目标路径
[root@hadoop102 ~]# hadoop fs -chown -R hive:hadoop /origin_data
3.修改数仓表所在路径
[root@hadoop102 ~]# hadoop fs -chown -R hive:hadoop /warehouse
4.修改hive家目录/user/hive
[root@hadoop102 ~]# hadoop fs -chown -R hive:hadoop /user/hive