系統環境:html
CDH 5.5
集羣各節點角色規劃爲:python
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 HiveServer二、HiveMetaStore
在 74節點,即 KDC server 節點上執行下面命令:shell
# 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 目錄api
# scp hive.keytab bd-ops-test-xx:/etc/hive/conf
並設置權限,分別在各節點上執行:bash
cd /etc/hive/conf/;chown hive:hadoop hive.keytab ;chmod 400 *.keytab
因爲 keytab 至關於有了永久憑證,不須要提供密碼(若是修改 kdc 中的 principal 的密碼,則該 keytab 就會失效),因此其餘用戶若是對該文件有讀權限,就能夠冒充 keytab 中指定的用戶身份訪問 hadoop,因此 keytab 文件須要確保只對 owner 有讀權限(0400)負載均衡
修改 hive-site.xml,添加下面配置:oop
<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>
記住將修改的上面文件同步到其餘節點,並再次一一檢查權限是否正確。ui
# scp /etc/hive/conf/hive-site.xml bd-ops-test-xx:/etc/hive/conf/
hive-metastore 是經過 hive 用戶啓動的,故在 77 上先獲取 hive 用戶的 ticket 再啓動服務:url
$ kinit -k -t /etc/hive/conf/hive.keytab hive/bd-ops-test-77@BIGDATA.COM # service hive-metastore start
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
$ 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 代碼連結 hive-server2:
String url = "jdbc:hive2://cdh1:10000/default;principal=hive/bd-ops-test77@BIGDATA.COM" Connection con = DriverManager.getConnection(url);
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)
系統環境:
CDH 5.5
集羣各節點角色規劃爲:
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
在每一個節點上運行下面的命令:
# yum install python-devel openssl-devel python-pip cyrus-sasl cyrus-sasl-gssapi cyrus-sasl-devel -y
在 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)
修改 74 節點上的 /etc/default/impala,在 IMPALA_CATALOG_ARGS
、IMPALA_SERVER_ARGS
和 IMPALA_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
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 用戶啓動的,故在 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 用戶啓動的,故在 74 上先獲取 impala 用戶的 ticket 再啓動服務:
$ kinit -k -t /etc/impala/conf/impala.keytab impala/bd-ops-test-74@BIGDATA.COM # service impala-server start
在啓用了 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;