文档章节

Hive、Impala配置Kerberos认证

PeanutLike
 PeanutLike
发布于 2016/09/08 15:44
字数 1661
阅读 819
收藏 2

一、Hive配置Kerberos认证

1、环境说明

系统环境:

  • 操作系统:CentOs 6.6
  • Hadoop版本:CDH 5.5
  • JDK版本:1.7.0_67

集群各节点角色规划为:

172.16.57.74    bd-ops-test-74      Hive  
172.16.57.75    bd-ops-test-75      Hive 
172.16.57.76    bd-ops-test-76      Hive
172.16.57.77    bd-ops-test-77      Hive HiveServer2、HiveMetaStore 

2、生成keytab

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

# cd /var/kerberos/krb5kdc/

kadmin.local -q "addprinc -randkey hive/bd-ops-test-77@BIGDATA.COM "
kadmin.local -q "xst  -k hive.keytab  hive/bd-ops-test-77@BIGDATA.COM "

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

# scp hive.keytab bd-ops-test-xx:/etc/hive/conf

并设置权限,分别在各节点上执行:

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@BIGDATA.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@BIGDATA.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>

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

# scp /etc/hive/conf/hive-site.xml bd-ops-test-xx:/etc/hive/conf/

4、 启动服务

启动 Hive MetaStore

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

$ kinit -k -t /etc/hive/conf/hive.keytab hive/bd-ops-test-77@BIGDATA.COM
# service hive-metastore start

启动 Hive Server2

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

$ kinit -k -t /etc/hive/conf/hive.keytab hive/bd-ops-test-77@BIGDATA.COM
# service hive-server2 start

5、测试

Hive CLI

$ hive
Logging initialized using configuration in file:/etc/hive/conf.dist/hive-log4j.properties
WARNING: Hive CLI is deprecated and migration to Beeline is recommended.
hive> create table a(id int);
OK
Time taken: 2.132 seconds
hive> select * from a;
OK
Time taken: 0.478 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/bd-ops-test77@BIGDATA.COM"
Connection con = DriverManager.getConnection(url);

Beeline

Beeline 连结 hive-server2:

beeline 
Beeline version 1.1.0-cdh5.5.1 by Apache Hive
beeline> !connect jdbc:hive2://bd-ops-test-77:10000/default;principal=hive/bd-ops-test-77@BIGDATA.COM
scan complete in 3ms
Connecting to jdbc:hive2://bd-ops-test-77:10000/default;principal=hive/bd-ops-test-77@BIGDATA.COM
Enter username for jdbc:hive2://bd-ops-test-77:10000/default;principal=hive/bd-ops-test-77@BIGDATA.COM: 
Enter password for jdbc:hive2://bd-ops-test-77:10000/default;principal=hive/bd-ops-test-77@BIGDATA.COM: 
Connected to: Apache Hive (version 1.1.0-cdh5.5.1)
Driver: Hive JDBC (version 1.1.0-cdh5.5.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://bd-ops-test-77:10000/default> select * from a;
+-------+--+
| a.id  |
+-------+--+
+-------+--+
No rows selected (1.809 seconds)
0: jdbc:hive2://bd-ops-test-77:10000/default> desc a;
+-----------+------------+----------+--+
| col_name  | data_type  | comment  |
+-----------+------------+----------+--+
| id        | int        |          |
+-----------+------------+----------+--+
1 row selected (0.268 seconds)

二、Impala配置Kerberos认证

1、环境说明

系统环境:

  • 操作系统:CentOs 6.6
  • Hadoop版本:CDH 5.5
  • JDK版本:1.7.0_67

集群各节点角色规划为:

172.16.57.74    bd-ops-test-74      impala-catalog impala-server impala-state-store
172.16.57.75    bd-ops-test-75      impala-server 
172.16.57.76    bd-ops-test-76      impala-server 
172.16.57.77    bd-ops-test-77      impala-server 

2、安装依赖的环境:

在每个节点上运行下面的命令:

 # yum install python-devel openssl-devel python-pip cyrus-sasl cyrus-sasl-gssapi cyrus-sasl-devel -y

3、生成keytab

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

# cd /var/kerberos/krb5kdc/

kadmin.local -q "addprinc -randkey impala/bd-ops-test-74@BIGDATA.COM "
kadmin.local -q "addprinc -randkey impala/bd-ops-test-75@BIGDATA.COM "
kadmin.local -q "addprinc -randkey impala/bd-ops-test-76@BIGDATA.COM "
kadmin.local -q "addprinc -randkey impala/bd-ops-test-77@BIGDATA.COM "

kadmin.local -q "xst  -k impala-unmerge.keytab  impala/bd-ops-test-74@BIGDATA.COM "
kadmin.local -q "xst  -k impala-unmerge.keytab  impala/bd-ops-test-75@BIGDATA.COM "
kadmin.local -q "xst  -k impala-unmerge.keytab  impala/bd-ops-test-76@BIGDATA.COM "
kadmin.local -q "xst  -k impala-unmerge.keytab  impala/bd-ops-test-77@BIGDATA.COM "

另外,如果你使用了haproxy来做负载均衡,参考官方文档Using Impala through a Proxy for High Availability,还需生成 proxy.keytab:

之前HTTP的principle已经生成过,现在讲HTTP和impala的keytab合并成一个impala.keytab

# ktutil
ktutil: rkt HTTP.keytab
ktutil: rkt impala-unmerge.keytab
ktutil: wkt impala.keytab
ktutil: quit

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

# scp impala.keytab bd-ops-test-xx:/etc/impala/conf

并设置权限,分别在各节点上执行:

cd /etc/impala/conf/;chown impala:hadoop impala.keytab ;chmod 400 *.keytab

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

4、修改 impala 配置文件

修改 74 节点上的 /etc/default/impala,在 IMPALA_CATALOG_ARGSIMPALA_SERVER_ARGSIMPALA_STATE_STORE_ARGS 中添加下面参数:

-kerberos_reinit_interval=60
-principal=impala/_HOST@BIGDATA.COM
-keytab_file=/etc/impala/conf/impala.keytab

IMPALA_CATALOG_ARGS 中添加:

-state_store_host=${IMPALA_STATE_STORE_HOST} \

将修改的上面文件同步到其他节点。最后,/etc/default/impala 文件如下,这里,为了避免 hostname 存在大写的情况,使用 hostname 变量替换 _HOST

IMPALA_CATALOG_SERVICE_HOST=bd-ops-test-74
IMPALA_STATE_STORE_HOST=bd-ops-test-74
IMPALA_STATE_STORE_PORT=24000
IMPALA_BACKEND_PORT=22000
IMPALA_LOG_DIR=/var/log/impala

IMPALA_MEM_DEF=$(free -m |awk 'NR==2{print $2-5120}')
hostname=`hostname -f |tr "[:upper:]" "[:lower:]"`

MPALA_CATALOG_ARGS=" -log_dir=${IMPALA_LOG_DIR} -state_store_host=${IMPALA_STATE_STORE_HOST} \
    -kerberos_reinit_interval=60\
    -principal=impala/${hostname}@BIGDATA.COM \
    -keytab_file=/etc/impala/conf/impala.keytab
"

IMPALA_STATE_STORE_ARGS=" -log_dir=${IMPALA_LOG_DIR} -state_store_port=${IMPALA_STATE_STORE_PORT}\
    -statestore_subscriber_timeout_seconds=15 \
    -kerberos_reinit_interval=60 \
    -principal=impala/${hostname}@BIGDATA.COM \
    -keytab_file=/etc/impala/conf/impala.keytab
"
IMPALA_SERVER_ARGS=" \
    -log_dir=${IMPALA_LOG_DIR} \
    -catalog_service_host=${IMPALA_CATALOG_SERVICE_HOST} \
    -state_store_port=${IMPALA_STATE_STORE_PORT} \
    -use_statestore \
    -state_store_host=${IMPALA_STATE_STORE_HOST} \
    -be_port=${IMPALA_BACKEND_PORT} \
    -kerberos_reinit_interval=60 \
    -principal=impala/${hostname}@BIGDATA.COM \
    -keytab_file=/etc/impala/conf/impala.keytab \
    -mem_limit=${IMPALA_MEM_DEF}m
"
ENABLE_CORE_DUMPS=false

将修改的上面文件同步到其他节点:

# scp /etc/default/impala bd-ops-test-xx:/etc/default/impala

5、启动服务

启动 impala-state-store

impala-state-store 是通过 impala 用户启动的,故在 74 上先获取 impala 用户的 ticket 再启动服务:

$ kinit -k -t /etc/impala/conf/impala.keytab impala/bd-ops-test-74@BIGDATA.COM
# service impala-state-store start

启动 impala-catalog

impala-catalog 是通过 impala 用户启动的,故在 74上先获取 impala 用户的 ticket 再启动服务:

$ kinit -k -t /etc/impala/conf/impala.keytab impala/bd-ops-test-74@BIGDATA.COM
# service impala-catalog start

启动 impala-server

impala-server 是通过 impala 用户启动的,故在 74 上先获取 impala 用户的 ticket 再启动服务:

$ kinit -k -t /etc/impala/conf/impala.keytab impala/bd-ops-test-74@BIGDATA.COM
# service impala-server start

6、测试

测试 impala-shell

在启用了 kerberos 之后,运行 impala-shell 时,需要添加 -k 参数:

-bash-4.1$ impala-shell -k
Starting Impala Shell using Kerberos authentication
Using service name 'impala'
Connected to bd-ops-test-74:21000
Server version: impalad version 2.3.0-cdh5.5.1 RELEASE (build 73bf5bc5afbb47aa7eab06cfbf6023ba8cb74f3c)
***********************************************************************************
Welcome to the Impala shell. Copyright (c) 2015 Cloudera, Inc. All rights reserved.
(Impala Shell v2.3.0-cdh5.5.1 (73bf5bc) built on Wed Dec  2 10:39:33 PST 2015)

After running a query, type SUMMARY to see a summary of where time was spent.
***********************************************************************************
[bd-ops-test-74:21000] > show tables;

 

© 著作权归作者所有

共有 人打赏支持
PeanutLike
粉丝 43
博文 22
码字总数 34274
作品 0
徐汇
技术主管
私信 提问
Impala和Hive集成Sentry、Kerberos认证

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

hblt-j
2018/12/13
0
0
配置Impala支持JDBC(翻译)

配置Impala支持JDBC Impala支持JDBC集成。通过使用 JDBC 驱动,你编写的 Java 程序、BI应用、或类似的使用 JDBC 访问不同数据库产品的工具,可以访问 Impala。建立到 Impala 的 JDBC 连接包括...

weiqingbin
2013/12/17
0
0
配置Impala支持ODBC(翻译)

配置Impala支持ODBC 可以使用ODBC实现第三方产品与Impala的集成。为了获得最佳体验,确保你计划使用的第三方产品支持ODBC。验证支持包括检查Impala、ODBC、操作系统、以及第三方软件的版本允...

weiqingbin
2013/12/16
0
0
Hadoop Sentry 学习

什么是Sentry? Sentry 是Cloudera 公司发布的一个Hadoop开源组件,它提供细粒度基于角色的安全控制 Sentry下的数据访问和授权 通过引进Sentry,Hadoop目前可在以下方面满足企业和政府用户的...

幽芒
2014/08/06
0
0
0032-如何在CDH启用Kerberos的情况下安装及使用Sentry(二)

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 5.Sentry列权限管理 1.在集群所有节点添加fayson_r用户 2.创建Kerberos用户fayson_r 3.使用hive用户登录Kerberos 使用bee...

Hadoop实操
2018/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
2
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
7
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部