我使用 Spark 1.6.0
通过 API DataFrame.read.parquet($path)
访问支持 Kerberos 的 HDFS 上的数据。
我的应用程序部署为带有客户端模式的 spark on yarn。 默认情况下,Kerberos 票证每 24 小时过期一次。前 24 小时内一切正常,但 24 小时后(或更长时间,如 27 小时)无法读取文件。
我尝试了几种登录和续订票证的方法,但都不行。
- 在
spark-defaults.conf
中设置spark.yarn.keytab
和spark.yarn.principal
- 在
spark-submit
命令行设置--keytab
和--principal
- 在代码中启动一个计时器,每 2 小时调用一次
UserGroupInformation.getLoginUser().checkTGTAndReloginFromKeytab()
。
错误详细信息是:
WARN [org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:671)] - Couldn't setup connection for adam/cluster1@DEV.COM to cdh01/192.168.1.51:8032
DEBUG [org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1632)] - PrivilegedActionException as:adam/cluster1@DEV.COM (auth:KERBEROS) cause:java.io.IOException: Couldn't setup connection for adam/cluster1@DEV.COMto cdh01/192.168.1.51:8032
ERROR [org.apache.spark.Logging$class.logError(Logging.scala:95)] - Failed to contact YARN for application application_1490607689611_0002.
java.io.IOException: Failed on local exception: java.io.IOException: Couldn't setup connection for adam/cluster1@DEV.COM to cdh01/192.168.1.51:8032; Host Details : local host is: "cdh05/192.168.1.41"; destination host is: "cdh01":8032;
最佳答案
问题解决了。 这是由于 Hadoop lib 版本错误引起的。 在 Spark 1.6 assembly jar 中,它指的是旧版本。 Hadoop lib,所以我再次下载了它,没有内置Hadoop lib,并引用了第三方Hadoop 2.8 lib。 然后它就可以正常工作了。
关于apache-spark - 如何在 spark yarn 客户端模式下更新 Kerberos 票证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43087471/