客户端无法通过以下方式进行身份验证:[TOKEN, KERBEROS],在远程群集上从 Spark 运行 Hive 查询



我们有一个设置,其中我们有 2 个集群,生产集群 A 和开发集群 B。在集群 B 中,创建指向集群 A (https://docs.cloudera.com/HDPDocuments/HDP2/HDP-2.6.5/bk_data-access/content/querying-remote-clusters.html( 中的 HDFS 的 Hive 表。我们可以成功查询集群 B 中的表,并且数据按预期返回(存储在集群 A 中的记录(,然后我们有一些 PySpark 代码,它使用以下方法查询表:

sqlContext.sql("query tables in B that point to HDFS in A") 

该代码在交互式 PySpark 会话中运行良好,但是当作为批处理作业运行时,我们得到:

org.apach.hadoop.security.AccessControlException: Client cannot authenticate via: [TOKEN,KERBEROS]

鉴于它在交互模式下工作,在我看来,某种类型的配置或权限(或者可能是 Kerberos(可以修复它,但支持团队中的一些成员认为这是 Spark 无法修复的限制,我们如何使这个 2 个集群与 1 个开发集群指向另一个生产集群中的 HDFS 使用批处理火花代码?

对此的修复是添加以下配置:

.config("spark.yarn.access.namenodes", "hdfs://cluster_A") 

最新更新