CDH 6.3.2中Zeppelin 0.9.0集成Kerberos失败及Livy认证报错问题求助
一、Zeppelin Kerberos认证失败排查步骤
从你描述的情况来看,spark-shell能正常走Kerberos认证但Zeppelin不行,说明Kerberos集群本身是正常的,问题大概率出在Zeppelin的配置细节或权限上,以下是具体排查和解决点:
1. 确认Zeppelin运行用户的keytab权限
Zeppelin通常是由zeppelin系统用户启动的,你需要确保jzyc.keytab的属主和权限完全正确,避免因权限不足导致无法读取:
chown zeppelin:zeppelin /path/to/jzyc.keytab chmod 600 /path/to/jzyc.keytab
这是Kerberos配置中最容易忽略的细节之一。
2. 补全Spark解释器的Kerberos参数
你已经配置了spark.yarn.keytab和spark.yarn.principal,但这只是提交YARN任务的认证参数,Spark Driver和Executor访问HDFS还需要额外配置。在Zeppelin的Spark解释器Properties中添加以下参数:
spark.hadoop.security.authentication=kerberosspark.hadoop.kerberos.keytab=/path/to/jzyc.keytabspark.hadoop.kerberos.principal=jzyc/hadoop@JJKK.COMspark.driver.kerberos.keytab=/path/to/jzyc.keytabspark.driver.kerberos.principal=jzyc/hadoop@JJKK.COMspark.executor.kerberos.keytab=/path/to/jzyc.keytabspark.executor.kerberos.principal=jzyc/hadoop@JJKK.COM
这些参数是Spark进程直接和HDFS/YARN做Kerberos认证的核心配置,缺一不可。
3. 验证主体的HDFS访问权限
先确认jzyc/hadoop@JJKK.COM这个主体本身能正常访问HDFS,执行以下命令测试:
kinit -kt jzyc.keytab jzyc/hadoop@JJKK.COM hdfs dfs -ls /
如果这个命令失败,说明主体没有HDFS的访问权限,需要通过HDFS ACL或者Ranger(如果集群用了)给该主体分配对应权限。
4. 完善Zeppelin Server的Kerberos配置
除了你已经配置的两个参数,还要在zeppelin-site.xml中开启Kerberos认证并补充规则:
<property> <name>zeppelin.server.kerberos.enabled</name> <value>true</value> </property> <property> <name>zeppelin.server.kerberos.name.rules</name> <value>DEFAULT</value> </property>
配置完成后重启Zeppelin服务生效。
5. 查看日志定位深层问题
如果以上步骤都没解决,去看Zeppelin的详细日志:
- Spark解释器日志:
/var/log/zeppelin/interpreter-spark-*.log,里面会有Driver/Executor认证失败的具体原因 - Zeppelin主日志:
/var/log/zeppelin/zeppelin-daemon.out,能看到Server端的Kerberos加载情况
二、Livy报错"javax.security.auth.login.LoginException: No key to store"解决
这个错误一般是Livy的Kerberos配置和SSL配置混淆导致的,常见解决方法:
1. 清理混乱的配置
打开livy.conf,确保Kerberos参数正确,同时避免和SSL配置冲突:
# 开启Kerberos认证 livy.server.auth.type=kerberos livy.server.auth.kerberos.principal=livy/[你的Livy节点主机名]@JJKK.COM livy.server.auth.kerberos.keytab=/path/to/livy专属的keytab文件 # 如果没启用SSL,直接禁用相关配置 livy.server.ssl.enabled=false
注意:不要把Kerberos的keytab路径填到SSL的livy.server.ssl.key-store参数里,这是最常见的错误。
2. 确保Livy用户的keytab权限
和Zeppelin一样,给Livy的keytab设置正确的属主和权限:
chown livy:livy /path/to/livy.keytab chmod 600 /path/to/livy.keytab
3. 检查krb5.conf一致性
所有节点的/etc/krb5.conf必须完全一致,包括REALM名称、KDC地址、域名映射等参数,否则会出现跨节点认证失败的问题。
内容的提问来源于stack exchange,提问作者ighack

