从运行在Kubernetes集群上的Spark独立集群中使用Hadoop集群进行Kerberos认证。

问题描述 投票:0回答:1

我在Kubernetes上设置了Spark Standalone集群,并试图连接到一个非Kubernetes的Kerberized Hadoop集群,我在Spark集群的容器中放置了core-site.xml和hdfs-site.xml,并相应地设置了HADOOP_CONF_DIR。我把core-site.xml和hdfs-site.xml放在Spark集群的容器中,并相应地设置了HADOOP_CONF_DIR。我能够在Spark容器中为访问Hadoop集群的Principal成功生成kerberos凭证缓存。但是当我运行spark-submit时,却在worker中出现了如下的访问控制异常,导致失败。注意------------------。 master和worker分别运行在不同的Kubernetes pods中。

spark-submit --master spark://master-svc:7077 --class myMainClass myApp.jar
Client cannot authenticate via: [TOKEN, KERBEROS] 

但是,当我在本地模式下从Spark容器中运行spark-submit时,它能够成功地与Hadoop集群对话。

spark-submit --master local[*] --class myMainClass myApp.jar

我需要设置什么配置才能让Worker在Spark Standalone模式下使用凭证缓存吗?

apache-spark hadoop kubernetes kerberos apache-spark-standalone
1个回答
1
投票

你有一个巨大的问题:AFAIK Spark Standalone不处理任何形式的认证。

  • local 模式,Spark clientdriverexecutors都住在同一个JVM中,Hadoop客户端lib可以直接访问存在于本地缓存中的Kerberos ticket(因此Spark不需要管理任何东西)。
  • yarn-cluster 模式,Spark 客户端使用本地 Kerberos 票据连接到 Hadoop 服务并检索特殊的 认证令牌 然后运到运行该驱动的 YARN 容器;然后驱动将令牌广播到执行器
  • yarn-client 模式下,它与快捷方式类似,因为Spark驱动与客户端一起运行,并且已经有了令牌。
  • 与Spark Standalone一起,你就完蛋了。

参照 https:/stackoverflow.coma442905445162372。 关于从Spark到Hive或HBase的Kerberos auth的更多细节,请参考以下内容 yarn-* 模式。

另请参考 --principal--keytab 长时间运行的作业(例如:流媒体)需要从驱动中即时更新他们的Kerberos creds的参数(因为Spark客户端可能在启动后就终止了)


也许你可以试试 spark.yarn.access.namenodes 来查看是否会强制 Spark 客户端获取 "额外的 "Kerberos 令牌,但我不会打赌,因为这个属性在 Spark Standalone 模式下可能会被忽略。

参考Steve Loughran在下面的评论。当在不安全的YARN集群中运行Spark时,访问一个安全的Hive。

© www.soinside.com 2019 - 2024. All rights reserved.