当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
- 检查kerberos服务是否启动
1systemctl status krb5kdc 2systemctl status kadmin
- 检查各服务器时间是否同步
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
解决方案
1#kadmin.local 2#modprinc -maxrenewlife 7days krbtgt/EXAMPLE.COM@EXAMPLE.COM
再重新启动hue。
2023年03月30日