当前位置: 首页 > 知识库问答 >
问题:

Kubernetes集群上运行的Spark独立集群的Hadoop集群Kerberos身份验证

聂宜
2023-03-14

我已经在Kubernetes上建立了Spark独立集群,并试图连接到Kubernetes上没有的Kerberized Hadoop集群。我已经将core-site.xml和hdfs-site.xml放在Spark集群的容器中,并相应地设置了HADOOP_CONF_DIR。我能够成功地在Spark容器中为访问Hadoop集群的principal生成kerberos凭据缓存。但是当我运行spark-submit时,它失败了,在worker中出现了以下访问控制异常。注主和工人在单独的Kubernetes吊舱中运行。

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

共有1个答案

徐峰
2023-03-14

您有一个巨大的问题:AFAIK Spark Standalone不能处理任何类型的身份验证。

  • local模式下,Spark客户机/驱动程序/执行程序都位于同一个JVM中,Hadoop客户机lib可以直接访问本地缓存中的Kerberos票证(因此Spark不必管理任何东西)
  • yarn-cluster模式下,Spark客户机使用本地Kerberos票证连接到Hadoop服务并检索特殊的auth令牌,然后将这些令牌发送到运行驱动程序的YARN容器;然后驱动程序将令牌广播给执行者
  • yarn-client模式下,它与快捷方式类似,因为Spark驱动程序与客户机一起运行,并且标记已经可用
  • 使用Spark Standonal,您就完蛋了。

请参见https://stackoverflow.com/a/44290544/5162372了解更多关于Kerberos auth to Hive或HBase的详细信息,这些信息来自yarn-*模式。

也许您可以尝试Spark.yarn.access.namenodes,看看这是否会强制Spark客户机获取“附加”Kerberos令牌,但我不敢打赌,因为在Spark独立模式下,该属性可能会被忽略。

参见Steve Loughran关于在不安全的纱线集群中运行Spark时访问一个安全的蜂巢的评论

 类似资料:
  • 15/02/06 15:17:12警告IPC.Client:连接到服务器时遇到异常:javax.security.sasl.saslexception:GSS initiate失败[由GSSException:未提供有效凭据(机制级别:找不到任何Kerberos tgt导致)]LS:本地异常失败:java.io.ioException:javax.security.sasl.saslexcepti

  • 工人出现在图片上。为了运行我的代码,我使用了以下命令:

  • 我们有一个Hadoop集群,数据节点为275个节点(55Tb总内存,12000个VCore)。这个集群与几个项目共享,我们有一个YARN队列分配给我们,资源有限。 为了提高性能,我们正在考虑为我们的项目构建一个单独的Spark集群(在同一网络中的Mesos上)并访问Hadoop集群上的HDFS数据。 正如Spark文档中提到的:https://spark.apache.org/docs/lates

  • 应用程序不是那么占用内存,有两个连接和写数据集到目录。同样的代码在spark-shell上运行没有任何失败。 寻找群集调优或任何配置设置,这将减少执行器被杀死。

  • 我有Kerberos并启用了Hadoop集群。我需要使用Java代码执行HDFS操作。 多谢了。

  • null sbin/start-slave.sh spark://c96___37fb:7077--用于并置从机的端口7078 sbin/start-slave.sh spark://masternodeip:7077--其他两个从机的端口7078 前面引用的所有端口都从nodeMaster重定向到相应的Docker。 因此,webUI向我显示,我的集群有3个连接的节点,不幸的是,当运行时,只有并