apache-spark - 从运行在 Kubernetes 集群上的 Spark 独立集群对 Hadoop 集群进行 Kerberos 身份验证

标签 apache-spark hadoop kubernetes kerberos apache-spark-standalone

我已经在 Kubernetes 上设置了 Spark Standalone 集群,并且正在尝试连接到不在 Kubernetes 上的 Kerberized Hadoop 集群。我已将 core-site.xml 和 hdfs-site.xml 放入 Spark 集群的容器中,并相应地设置了 HADOOP_CONF_DIR。我能够在 Spark 容器中为访问 Hadoop 集群的主体成功生成 kerberos 凭证缓存。但是当我运行spark-submit时,它失败并出现以下访问控制异常。 注意 - master 和worker 在单独的 Kubernetes pod 中运行。

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 Stand alone 模式下使用凭证缓存?

最佳答案

您遇到了一个大问题:据我所知 Spark Standalone 不处理任何类型的身份验证。

  • 本地模式下,Spark客户端/驱动程序/执行器都位于同一个JVM中,Hadoop客户端库可以直接访问本地缓存中存在的Kerberos票证(因此Spark没有管理任何事情)
  • yarn-cluster 模式下,Spark 客户端使用本地 Kerberos 票证连接到 Hadoop 服务并检索特殊的身份验证 token ,然后将其发送到运行的 YARN 容器司机;然后驱动程序将 token 广播给执行程序
  • yarn-client 模式下,它与快捷方式类似,因为 Spark 驱动程序与客户端一起运行并且 token 已可用
  • 有了 Spark Standalone,你就完蛋了。

比照。 https://stackoverflow.com/a/44290544/5162372有关在 yarn-* 模式下从 Spark 对 Hive 或 HBase 进行 Kerberos 身份验证的更多详细信息。

比照。还有长时间运行的作业(例如流媒体)所需的 --principal--keytab 参数,这些作业需要从内部即时更新其 Kerberos 凭据驱动程序(因为 Spark 客户端可能在启动后立即终止)


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

比照。 Steve Loughran 在 Access a secured Hive when running Spark in an unsecured YARN cluster 上的评论

关于apache-spark - 从运行在 Kubernetes 集群上的 Spark 独立集群对 Hadoop 集群进行 Kerberos 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61736734/

相关文章:

java - 权限被拒绝通过Hadoop Java API访问HDFS

scala - 错误:对象rocksdb不是软件包orgs的成员

java - JVM 是否会在分布式/并行处理中产生大量开销?

amazon-web-services - 创建内部负载均衡器

shell - 将 Apache Spark Shell 与 Cron 结合使用 - 如何操作?

scala - SBT : Running Spark job on remote cluster from sbt

python - 如果不将 Anaconda 库添加到 %PATH,Zeppelin %python.conda 和 %python.sql 解释器将无法工作

apache-spark - Spark作业优化: Is there a way to tune spark job which has too many joins

sql - 如何将此字符串转换为时间戳

kubernetes - 如何更改系统命名空间?