文档章节

Hive配置Kerberos认证

闪电
 闪电
发布于 2017/01/16 20:06
字数 1098
阅读 25
收藏 0

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

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

1. 环境说明

系统环境:

  • 操作系统:CentOs 6.6
  • Hadoop版本:CDH5.4
  • JDK版本:1.7.0_71
  • 运行用户:root

集群各节点角色规划为:

192.168.56.121        cdh1     NameNode、ResourceManager、HBase、Hive metastore、Impala Catalog、Impala statestore、Sentry 
192.168.56.122        cdh2     DataNode、SecondaryNameNode、NodeManager、HBase、Hive Server2、Impala Server
192.168.56.123        cdh3     DataNode、HBase、NodeManager、Hive Server2、Impala Server

cdh1作为master节点,其他节点作为slave节点,hostname 请使用小写,要不然在集成 kerberos 时会出现一些错误。

2. 生成 keytab

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

$ cd /var/kerberos/krb5kdc/

kadmin.local -q "addprinc -randkey hive/cdh1@JAVACHEN.COM "
kadmin.local -q "addprinc -randkey hive/cdh2@JAVACHEN.COM "
kadmin.local -q "addprinc -randkey hive/cdh3@JAVACHEN.COM "

kadmin.local -q "xst  -k hive.keytab  hive/cdh1@JAVACHEN.COM "
kadmin.local -q "xst  -k hive.keytab  hive/cdh2@JAVACHEN.COM "
kadmin.local -q "xst  -k hive.keytab  hive/cdh3@JAVACHEN.COM "

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

$ scp hive.keytab cdh1:/etc/hive/conf
$ scp hive.keytab cdh2:/etc/hive/conf
$ scp hive.keytab cdh3:/etc/hive/conf

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

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

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

3. 修改 hive 配置文件

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

<property>
  <name>hive.server2.authentication</name>
  <value>KERBEROS</value>
</property>
<property>
  <name>hive.server2.authentication.kerberos.principal</name>
  <value>hive/_HOST@JAVACHEN.COM</value>
</property>
<property>
  <name>hive.server2.authentication.kerberos.keytab</name>
  <value>/etc/hive/conf/hive.keytab</value>
</property>

<property>
  <name>hive.metastore.sasl.enabled</name>
  <value>true</value>
</property>
<property>
  <name>hive.metastore.kerberos.keytab.file</name>
  <value>/etc/hive/conf/hive.keytab</value>
</property>
<property>
  <name>hive.metastore.kerberos.principal</name>
  <value>hive/_HOST@JAVACHEN.COM</value>
</property>

在 core-site.xml 中添加:

<property>
  <name>hadoop.proxyuser.hive.hosts</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.hive.groups</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.hdfs.hosts</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.hdfs.groups</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.HTTP.hosts</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.HTTP.groups</name>
  <value>*</value>
</property>

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

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

4. 启动服务

启动 Hive MetaStore

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

$ kinit -k -t /etc/hive/conf/hive.keytab hive/cdh1@JAVACHEN.COM
$ service hive-metastore start

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

启动 Hive Server2

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

$ kinit -k -t /etc/hive/conf/hive.keytab hive/cdh1@JAVACHEN.COM
$ service hive-server2 start

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

5. 测试

Hive CLI

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

$ klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hdfs/dn5.h.lashou-inc.com@lashou_hadoop

Valid starting     Expires            Service principal
11/06/14 11:39:09  11/07/14 11:39:09  krbtgt/lashou_hadoop@lashou_hadoop
  renew until 11/08/14 11:39:09


Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached

运行Hive cli:

$ hive
hive> set system:user.name;
system:user.name=root
hive> create table t(id int);
OK
Time taken: 2.183 seconds
hive> show tables;
OK
t
Time taken: 1.349 seconds
hive> select * from t;
OK
Time taken: 1.116 seconds

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

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

JDBC 客户端

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

String url = "jdbc:hive2://cdh1:10000/default;principal=hive/cdh1@JAVACHEN.COM"
Connection con = DriverManager.getConnection(url);

Beeline

Beeline 连结 hive-server2:

$ beeline
beeline> !connect jdbc:hive2://cdh1:10000/default;principal=hive/cdh1@JAVACHEN.COM
scan complete in 4ms
Connecting to jdbc:hive2://localhost:10000/default;principal=hive/cdh1@JAVACHEN.COM;
Enter username for jdbc:hive2://localhost:10000/default;principal=hive/cdh1@JAVACHEN.COM;:
Enter password for jdbc:hive2://localhost:10000/default;principal=hive/cdh1@JAVACHEN.COM;:
Connected to: Apache Hive (version 0.14.0)
Driver: Hive (version 0.14.0-cdh5.4.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://cdh1:10000/default> select * from t;
+-------+--+
| t.id  |
+-------+--+
+-------+--+
No rows selected (1.575 seconds)
0: jdbc:hive2://cdh1:10000/default> desc t;
+-----------+------------+----------+--+
| col_name  | data_type  | comment  |
+-----------+------------+----------+--+
| id        | int        |          |
+-----------+------------+----------+--+
1 row selected (0.24 seconds)

本文转载自:http://blog.javachen.com/2014/11/06/config-kerberos-in-cdh-hive.html

闪电
粉丝 75
博文 392
码字总数 6789
作品 0
海淀
技术主管
私信 提问
Impala和Hive集成Sentry、Kerberos认证

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

hblt-j
2018/12/13
76
0
也说Hadoop敏感信息加密方案的尝试(下)

前面讲到了AES对称加密的两个不同方案,一是Hive表存储秘钥,一是用KMS来存储秘钥。在这两个大的分类下,又各自有两种不同的方案,每种方案的尝试都是因为踩到了坑,所以才不得不换一种姿势。...

问津已非少年
2016/12/18
278
0
Hive+LDAP+Sentry

介绍 hadoop生态里面常用的安全认证无非两种kerberos和ldap,kerberos的繁琐已经领教过了,ldap还好在生产中也用过,看来hive+ldap+sentry用起来应该比较顺手一些。hive+sentry的配置见Sentr...

China_OS
2017/04/26
482
0
Hive、Impala配置Kerberos认证

一、Hive配置Kerberos认证 1、环境说明 系统环境: 操作系统:CentOs 6.6 Hadoop版本: JDK版本:1.7.0_67 集群各节点角色规划为: 2、生成keytab 在 74节点,即 KDC server 节点上执行下面命...

PeanutLike
2016/09/08
1K
0
KMS密钥管理服务(Hadoop)

前言 是Hadoop下的一个密钥管理服务,它实际是与Hadoop结合,提供HDFS文件做AES加密用的。所以它是用来存储AES秘钥的,AES提供三种位数的秘钥,分别是, , ,所以KMS只能存储这三种位数的数组...

问津已非少年
2016/12/18
712
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
154
8
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
2
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部