一、Hive配置Kerberos认证 1、环境说明 系统环境: 操作系统:CentOs 6.6 Hadoop版本:CDH 5.5 JDK版本:1.7.0_67 集群各节点角色规划为: 172
一、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 Hive172.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/[email protected] "kadmin.local -q "xst -k hive.keytab hive/[email protected] "
拷贝 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/[email protected]</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/[email protected]</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/[email protected]# service hive-metastore start
启动 Hive Server2
hive-server2 是通过 hive 用户启动的,故在 77上先获取 hive 用户的 ticket 再启动服务:
$ kinit -k -t /etc/hive/conf/hive.keytab hive/[email protected]# service hive-server2 start
5、测试
Hive CLI
$ hiveLogging initialized using configuration in file:/etc/hive/conf.dist/hive-log4j.propertiesWARNING: Hive CLI is deprecated and migration to Beeline is recommended.hive> create table a(id int);OKTime taken: 2.132 secondshive> select * from a;OKTime 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/[email protected]"Connection con = DriverManager.getConnection(url);
Beeline
Beeline 连结 hive-server2:
beeline Beeline version 1.1.0-cdh5.5.1 by Apache Hivebeeline> !connect jdbc:hive2://bd-ops-test-77:10000/default;principal=hive/[email protected] complete in 3msConnecting to jdbc:hive2://bd-ops-test-77:10000/default;principal=hive/[email protected] username for jdbc:hive2://bd-ops-test-77:10000/default;principal=hive/[email protected]: Enter password for jdbc:hive2://bd-ops-test-77:10000/default;principal=hive/[email protected]: 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_READ0: 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-store172.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/[email protected] "kadmin.local -q "addprinc -randkey impala/[email protected] "kadmin.local -q "addprinc -randkey impala/[email protected] "kadmin.local -q "addprinc -randkey impala/[email protected] "kadmin.local -q "xst -k impala-unmerge.keytab impala/[email protected] "kadmin.local -q "xst -k impala-unmerge.keytab impala/[email protected] "kadmin.local -q "xst -k impala-unmerge.keytab impala/[email protected] "kadmin.local -q "xst -k impala-unmerge.keytab impala/[email protected] "
另外,如果你使用了haproxy来做负载均衡,参考官方文档Using Impala through a Proxy for High Availability,还需生成 proxy.keytab:
之前HTTP的principle已经生成过,现在讲HTTP和impala的keytab合并成一个impala.keytab
# ktutilktutil: rkt HTTP.keytabktutil: rkt impala-unmerge.keytabktutil: wkt impala.keytabktutil: 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_ARGS
、IMPALA_SERVER_ARGS
和 IMPALA_STATE_STORE_ARGS
中添加下面参数:
-kerberos_reinit_interval=60-principal=impala/[email protected]_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-74IMPALA_STATE_STORE_HOST=bd-ops-test-74IMPALA_STATE_STORE_PORT=24000IMPALA_BACKEND_PORT=22000IMPALA_LOG_DIR=/var/log/impalaIMPALA_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/[email protected]# service impala-state-store start
启动 impala-catalog
impala-catalog 是通过 impala 用户启动的,故在 74上先获取 impala 用户的 ticket 再启动服务:
$ kinit -k -t /etc/impala/conf/impala.keytab impala/[email protected]# service impala-catalog start
启动 impala-server
impala-server 是通过 impala 用户启动的,故在 74 上先获取 impala 用户的 ticket 再启动服务:
$ kinit -k -t /etc/impala/conf/impala.keytab impala/[email protected]# service impala-server start
6、测试
测试 impala-shell
在启用了 kerberos 之后,运行 impala-shell 时,需要添加 -k
参数:
-bash-4.1$ impala-shell -kStarting Impala Shell using Kerberos authenticationUsing service name 'impala'Connected to bd-ops-test-74:21000Server 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;