封面图片

大数据

CDH集成Kerberos常见问题解答

当CDH集成Kerberos之后,可能会出现一些意想不到的事情。这里是常见问题及解决方法。


提交Hive on Spark任务报错

现象

错误信息:

Failed to create spark client for spark session xxx: java.util.concurrent.TimeoutException: client xxx timedout waiting for connection from the remote spark driver

或者:

Failed to create spark client for spark session xxx: java.lang.RuntimeException: spark-submit

原因分析

HIVE 作业的执行机制如下:

  • 终端业务用户比如 xyz 提交给 HIVESERVER2 的 SQL作业,经过 HIVESERVER2 的解析编译和优化后,一般会生成 MR/TEZ/SPARK 任务(之所以说一般,是因为有的 SQL 是直接在HIVESERVER2中执行的,不会生成分布式的 MR/TEZ/SPARK 任务),这些 MR/TEZ/SPARK 任务最终访问底层的基础设施 HDFS 和 YARN 时,一样要经过 kerberos 安全认证;
  • 当启用了 HIVE 的代理机制时(hive.server.enable.doAs=true),业务终端用户如 xyz 提交的 HIVE SQL 作业底层的 MR/TEZ/SPARK 任务访问 HDFS/YARN 时,HDFS/YARN 验证的是业务终端用户 xyz 的身份 (后续 HDFS/YARN 的权限校验,校验的也是 xyz 用户的权限);
  • 当没有启用 HIVE 的代理机制时(hive.server.enable.doAs=false),业务终端用户提交的 HIVE SQL 作业底层的 MR/TEZ/SPARK 任务访问 HDFS/YARN 时,需要验证的是 hiveserver2 服务对应的用户,即 hive 的身份 (后续 HDFS/YARN 的权限校验,校验的也是 hive 用户的权限);

解决方案

关闭 hive的代理功能,即hive.server2.enable.doAs=false

拓展

  • 终端业务用户比如 xyz 提交给 HIVESERVER2 的 SQL作业,经过 HIVESERVER2 的解析编译和优化后,一般会生成 MR/TEZ/SPARK 任务(之所以说一般,是因为有的 SQL 是直接在HIVESERVER2中执行的,不会生成分布式的 MR/TEZ/SPARK 任务),这些 MR/TEZ/SPARK 任务最终访问底层的基础设施 HDFS 和 YARN 时,一样要经过这些基础设施 hdfs/yarn的 安全认证;
  • 当启用了 HIVE 的代理机制时(hive.server.enable.doAs=true),业务终端用户如 xyz 提交的 HIVE SQL 作业底层的 MR/TEZ/SPARK 任务访问 HDFS/YARN 时,HDFS/YARN 验证的是业务终端用户 xyz 的身份 (后续 HDFS/YARN 的权限校验,校验的也是 xyz 用户的权限);
  • 当没有启用 HIVE 的代理机制时(hive.server.enable.doAs=false),业务终端用户提交的 HIVE SQL 作业底层的 MR/TEZ/SPARK 任务访问 HDFS/YARN 时,需要验证的是 hiveserver2 服务对应的用户,即 hive 的身份 (后续 HDFS/YARN 的权限校验,校验的也是 hive 用户的权限);

CDH启动失败

检查checkList

  1. 检查kerberos服务是否启动
1systemctl status krb5kdc 2systemctl status kadmin
  1. 检查各服务器时间是否同步

Kerberos Ticket Renewer无法启动

现象

cdh报错提示:

If the 'renew until' date is the same as the 'valid starting' date, the ticket cannot be renewed.

登录hue/cdh03@EXAMPLE.COM

1[root@cdh03 tmp]# kinit -kt /var/run/cloudera-scm-agent/process/2069-hue-KT_RENEWER/hue.keytab hue/cdh03@EXAMPLE.COM

通过klist查看:

1[root@cdh03 hue]# klist -f -c /var/run/hue/hue_krb5_ccache 2Ticket cache: FILE:/var/run/hue/hue_krb5_ccache 3Default principal: hue/cdh03@EXAMPLE.COM 4 5Valid starting Expires Service principal 62022-06-08T10:04:11 2022-06-09T10:03:45 krbtgt/EXAMPLE.COM@EXAMPLE.COM 7 renew until 2022-06-08T10:04:11, Flags: FRI
1#kadmin.local 2#getprinc krbtgt/EXAMPLE.COM@EXAMPLE.COM

查看发现Maximum renewable被设置为了0

image.png

解决方案

1#kadmin.local 2#modprinc -maxrenewlife 7days krbtgt/EXAMPLE.COM@EXAMPLE.COM

再重新启动hue。

2023年03月30日
在初学者眼中,世界充满了可能;专家眼中,世界大都已经既定。--铃木俊隆