impala集成kerberos问题一例

简介:
最近在折腾hadoop+kerberos,由于线上使用的组件比较多,遇到不少问题,记录下来,碰到同样问题的同学可以参考下。
在hdfs+mapred+kerberos运行正常后,开始尝试集成impala.
其中statestore的参数:
1
2
export  IMPALA_STATE_STORE_ARGS=${IMPALA_STATE_STORE_ARGS:- -log_dir=${IMPALA_LOG_DIR} \
     -state_store_port=${IMPALA_STATE_STORE_PORT} -kerberos_reinit_interval=60 -principal=impala /xxxxxx @KERBEROS_HADOOP -keytab_file= /etc/impala/conf .dist /impala .keytab}
impala-server的参数:
1
2
3
4
export  IMPALA_SERVER_ARGS=${IMPALA_SERVER_ARGS:- -log_dir=${IMPALA_LOG_DIR} \
   -state_store_port=${IMPALA_STATE_STORE_PORT} -use_statestore -state_store_host=${IMPALA_STATE_STORE_HOST} \
   -be_port=${IMPALA_BACKEND_PORT} -statestore_subscriber_timeout_seconds=${STATESTORE_SUBSCRIBER_TIMEOUT_SECONDS} -mem_limit=50% \
     -kerberos_reinit_interval=60 -principal=impala /xxxxx @KERBEROS_HADOOP -keytab_file= /etc/impala/conf .dist /impala .keytab}


启动statestore没有异常,因为在impala 1.1.1版本中,statestore只是做一个监控impala-server进程的作用,不涉及和hadoop的通信,而在启动impala-server时,发现进程运行一段时间之后就会crash,通过设置impala的日志级别export GLOG_v=3,可以在日志中观察到下面的错误:

1
2
3
4
5
6
7
E0305 17:29:06.696974 12551 UserGroupInformation.java:1411] PriviledgedActionException as:impala /datanode @KERBEROS_HADOOP (auth:KERBEROS)
cause:java.io.IOException: Couldn't setup connection  for  impala /gd6g12s103-hadooptest-datanode .idc.vipshop.com@KERBEROS_HADOOP to hdfs /namenode @KERBEROS_HADOOP
E0305 17:29:06.699252 12551 impala-server.cc:339] Could not  read  the HDFS root directory at hdfs: //bipcluster . Error was:
Failed on  local  exception: java.io.IOException: Couldn't setup connection  for  impala /gdatanode @KERBEROS_HADOOP to
hdfs /namenode @KERBEROS_HADOOP; Host Details :  local  host is:  "datanode/ip" ;
destination host is:  "namenode" :8020;
E0305 17:29:06.699296 12551 impala-server.cc:341] Aborting Impala Server startup due to improper configuration


可以看到确实再用kerbers做验证登陆,但是在datanode和namenode通信时出现错误,因为线上用了namenode的ha,在日志中发现有ha的报错,因为怀疑是ha的问题,在关闭ha后,问题仍然存在。
日志中还有tgt相关的报错:
1
Caused by: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to  find  any Kerberos tgt)]
但是手动通过kinit验证,是可以获取tgt的,说明tgt的验证是ok的。

在datanode端,运行hadoop fs -ls 的命令时,报错。通过export HADOOP_ROOT_LOGGER=DEBUG,console 设置hadoop命令的日志级别,发现也是同样报了tgt相关的错误。
在通过klist查看tgt的cache,发现tgt竟然过期了,而且不能进行kinit -R.
1
2
3
4
5
6
klist
Ticket cache: FILE: /tmp/krb5cc_501
Default principal: hdfs /namenode @KERBEROS_HADOOP
Valid starting     Expires            Service principal
03 /11/14  18:45:52  03 /12/14  18:45:52  krbtgt /KERBEROS_HADOOP @KERBEROS_HADOOP
         renew  until  03 /11/14  18:45:56

这是由于renew expires导致,kerberos中有两个时间比较重要:
max_list,tgt的有效时间,max_renewable_life ,renew的时间,在max_renewable_life 时间内,过期的tgt可以renew,如果时间超过max_renewable_life就不能renew了。。
查看线上的设置:
1
2
max_life = 25h
max_renewable_life = 4w
而实际renew 的最大时间却是4s(03/11/14 18:45:56-03/11/14 18:45:52),看来w不是week的意思。。不知道算不算bug,修正下,改成30d,重新kinit,就正常了。。

后面如果报Kerberos: Couldn't find mech GSSAPI 说明是cyrus-sasl-gssapi的相关包没有安装。
启动正常后验证:
1
2
3
4
5
6
7
8
9
10
11
12
impala-shell -i  ip -k  -s impala
Starting Impala Shell  in  secure mode (using Kerberos)
[10.19.111.106:21000] > use cdnlog;
Query: use cdnlog
[10.19.111.106:21000] >  select  count(1) from dd_log;
Query:  select  count(1) from dd_log
Query finished, fetching results ...
+----------+
| count(1) |
+----------+
| 5000000  |
+----------+

可以看到已经正常跑了,自己对kerberos的了解还是太少了,在解决kerberos的相关问题的时候,第一步就应该用klist验证。。


本文转自菜菜光 51CTO博客,原文链接:http://blog.51cto.com/caiguangguang/1381323,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
分布式计算 Hadoop Java
hadoop sdk 优化小结(裁剪、集成kerberos组件、定制等)
hadoop sdk 优化小结(裁剪、集成kerberos组件、定制等)
41 0
|
8月前
|
分布式计算 Kubernetes Hadoop
hadoop sdk 优化小结(裁剪、集成kerberos组件、定制等)
hadoop sdk优化、裁剪、集成kerberos组件、定制化等
83 0
|
9月前
|
SQL HIVE 数据安全/隐私保护
Hive Impala和Hue集成LDAP
Hive Impala和Hue集成LDAP
165 0
|
数据可视化 大数据 数据库
集成 Oozie 服务-集成 Impala 服务 | 学习笔记
快速学习 集成 Oozie 服务-集成 Impala 服务
72 0
集成 Oozie 服务-集成 Impala 服务 | 学习笔记
|
SQL Java 数据库连接
|
分布式计算 Hadoop 数据安全/隐私保护
E-MapReduce集群中HDFS服务集成Kerberos
本文介绍在E-MapReduce集群中HDFS服务集成Kerberos。
6617 0
|
SQL Java 数据库连接
|
SQL 安全 分布式数据库
配置安全的Impala集群集成Sentry
本文主要记录配置安全的Impala集群集成Sentry的过程。Impala集群上配置了Kerberos认证,并且需要提前配置好Hive与Kerberos和Sentry的集成: 使用yum安装CDH Hadoop集群 Hive配置kerberos认证 Impala配置kerberos认证 配置
5493 1

热门文章

最新文章