Hive配置Kerberos认证

关于 Kerberos 的安装和 HDFS 配置 kerberos 认证,请参考 HDFS配置kerberos认证

关于 Kerberos 的安装和 YARN 配置 kerberos 认证,请参考 YARN配置kerberos认证

请先完成 HDFS 和 YARN 配置 Kerberos 认证,再来配置 Hive 集成 Kerberos 认证 !

参考 使用yum安装CDH Hadoop集群 安装 hadoop 集群,集群包括三个节点,每个节点的ip、主机名和部署的组件分配如下:

192.168.56.121        cdh1     NameNode、Hive、ResourceManager、HBase、Kerberos Server
192.168.56.122        cdh2     DataNode、SSNameNode、NodeManager、HBase
192.168.56.123        cdh3     DataNode、HBase、NodeManager

注意:hostname 请使用小写,要不然在集成 kerberos 时会出现一些错误。

1. 生成 keytab

在 cdh1 节点,即 KDC server 节点上执行下面命令:

 
  1. $ cd /var/kerberos/krb5kdc/

  2.  
  3. kadmin.local -q "addprinc -randkey hive/[email protected] "

  4. kadmin.local -q "addprinc -randkey hive/[email protected] "

  5. kadmin.local -q "addprinc -randkey hive/[email protected] "

  6.  
  7. kadmin.local -q "xst -k hive.keytab hive/[email protected] "

  8. kadmin.local -q "xst -k hive.keytab hive/[email protected] "

  9. kadmin.local -q "xst -k hive.keytab hive/[email protected] "

拷贝 hive.keytab 文件到其他节点的 /etc/hive/conf 目录

 
  1. $ scp hive.keytab cdh1:/etc/hive/conf

  2. $ scp hive.keytab cdh2:/etc/hive/conf

  3. $ scp hive.keytab cdh3:/etc/hive/conf

并设置权限,分别在 cdh1、cdh2、cdh3 上执行:

 
  1. $ ssh cdh1 "cd /etc/hive/conf/;chown hive:hadoop hive.keytab ;chmod 400 *.keytab"

  2. $ ssh cdh2 "cd /etc/hive/conf/;chown hive:hadoop hive.keytab ;chmod 400 *.keytab"

  3. $ ssh cdh3 "cd /etc/hive/conf/;chown hive:hadoop hive.keytab ;chmod 400 *.keytab"

由于 keytab 相当于有了永久凭证,不需要提供密码(如果修改 kdc 中的 principal 的密码,则该 keytab 就会失效),所以其他用户如果对该文件有读权限,就可以冒充 keytab 中指定的用户身份访问 hadoop,所以 keytab 文件需要确保只对 owner 有读权限(0400)

2. 修改 hive 配置文件

修改 hive-site.xml,添加下面配置:

 
  1. <property>

  2. <name>hive.server2.authentication</name>

  3. <value>KERBEROS</value>

  4. </property>

  5. <property>

  6. <name>hive.server2.authentication.kerberos.principal</name>

  7. <value>hive/[email protected]</value>

  8. </property>

  9. <property>

  10. <name>hive.server2.authentication.kerberos.keytab</name>

  11. <value>/etc/hive/conf/hive.keytab</value>

  12. </property>

  13.  
  14. <property>

  15. <name>hive.metastore.sasl.enabled</name>

  16. <value>true</value>

  17. </property>

  18. <property>

  19. <name>hive.metastore.kerberos.keytab.file</name>

  20. <value>/etc/hive/conf/hive.keytab</value>

  21. </property>

  22. <property>

  23. <name>hive.metastore.kerberos.principal</name>

  24. <value>hive/[email protected]</value>

  25. </property>

在 core-site.xml 中添加:

 
  1. <property>

  2. <name>hadoop.proxyuser.hive.hosts</name>

  3. <value>*</value>

  4. </property>

  5. <property>

  6. <name>hadoop.proxyuser.hive.groups</name>

  7. <value>*</value>

  8. </property>

  9. <property>

  10. <name>hadoop.proxyuser.hdfs.hosts</name>

  11. <value>*</value>

  12. </property>

  13. <property>

  14. <name>hadoop.proxyuser.hdfs.groups</name>

  15. <value>*</value>

  16. </property>

  17. <property>

  18. <name>hadoop.proxyuser.HTTP.hosts</name>

  19. <value>*</value>

  20. </property>

  21. <property>

  22. <name>hadoop.proxyuser.HTTP.groups</name>

  23. <value>*</value>

  24. </property>

记住将修改的上面文件同步到其他节点:cdh2、cdh3,并再次一一检查权限是否正确。

 
  1. $ scp /etc/hive/conf/hive-site.xml cdh2:/etc/hive/conf/

  2. $ scp /etc/hive/conf/hive-site.xml cdh3:/etc/hive/conf/

3. 启动服务

启动 Hive MetaStore

hive-metastore 是通过 hive 用户启动的,故在 cdh1 上先获取 hive 用户的 ticket 再启动服务:

 
  1. $ kinit -k -t /etc/hive/conf/hive.keytab hive/[email protected]

  2. $ service hive-metastore start

然后查看日志,确认是否启动成功。

启动 Hive Server2

hive-server2 是通过 hive 用户启动的,故在 cdh2 和 cdh3 上先获取 hive 用户的 ticket 再启动服务:

 
  1. $ kinit -k -t /etc/hive/conf/hive.keytab hive/[email protected]

  2. $ service hive-server2 start

然后查看日志,确认是否启动成功。

4. 测试

Hive CLI

在没有配置 kerberos 之前,想要通过 hive 用户运行 hive 命令需要执行sudo,现在配置了 kerberos 之后,不再需要 sudo 了,hive 会通过 ticket 中的用户去执行该命令:

 
  1. $ klist

  2. Ticket cache: FILE:/tmp/krb5cc_0

  3. Default principal: hdfs/dn5.h.lashou-inc.com@lashou_hadoop

  4.  
  5. Valid starting Expires Service principal

  6. 11/06/14 11:39:09 11/07/14 11:39:09 krbtgt/lashou_hadoop@lashou_hadoop

  7. renew until 11/08/14 11:39:09

  8.  
  9.  
  10. Kerberos 4 ticket cache: /tmp/tkt0

  11. klist: You have no tickets cached

  12.  
  13. $ hive

  14. hive> set system:user.name;

  15. system:user.name=root

  16. hive> create table t(id int);

  17. OK

  18. Time taken: 2.183 seconds

  19. hive> show tables;

  20. OK

  21. t

  22. Time taken: 1.349 seconds

  23. hive> select * from t;

  24. OK

  25. Time taken: 1.116 seconds

可以看到在获取了 hdfs 用户的 ticket 之后,进入 hive cli 可以执行查看表、查询数据等命令。当然,你也可以获取 hive 的 ticket 之后再来运行 hive 命令。

另外,如果你想通过普通用户来访问 hive,则需要 kerberos 创建规则和导出 ticket,然后把这个 ticket 拷贝到普通用户所在的家目录,在获取 ticket 了之后,再运行 hive 命令即可。

JDBC 客户端

客户端通过 jdbc 代码连结 hive-server2:

 
  1. String url = "jdbc:hive2://cdh1:10000/default;principal=hive/[email protected]"

  2. Connection con = DriverManager.getConnection(url);

Beeline

Beeline 连结 hive-server2:

 
  1. $ beeline

  2. beeline> !connect jdbc:hive2://cdh1:10000/default;principal=hive/[email protected]

  3. scan complete in 4ms

  4. Connecting to jdbc:hive2://localhost:10000/default;principal=hive/[email protected];

  5. Enter username for jdbc:hive2://localhost:10000/default;principal=hive/[email protected];:

  6. Enter password for jdbc:hive2://localhost:10000/default;principal=hive/[email protected];:

  7. Connected to: Apache Hive (version 0.13.1)

  8. Driver: Hive (version 0.13.1-cdh5.2.0)

  9. Transaction isolation: TRANSACTION_REPEATABLE_READ

  10. 0: jdbc:hive2://cdh1:10000/default> select * from t;

  11. +-------+--+

  12. | t.id |

  13. +-------+--+

  14. +-------+--+

  15. No rows selected (1.575 seconds)

  16. 0: jdbc:hive2://cdh1:10000/default> desc t;

  17. +-----------+------------+----------+--+

  18. | col_name | data_type | comment |

  19. +-----------+------------+----------+--+

  20. | id | int | |

  21. +-----------+------------+----------+--+

  22. 1 row selected (0.24 seconds)

https://blog.csdn.net/a118170653/article/details/43448133

猜你喜欢

转载自blog.csdn.net/zhushanzhi/article/details/88819258
今日推荐