使用运行在kubernetes集群上的spark独立集群的hadoop集群进行kerberos身份验证

dfuffjeb  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(642)

我已经在kubernetes上建立了spark独立集群,我正在尝试连接到kubernetes上没有的kerberized hadoop集群。我已经将core-site.xml和hdfs-site.xml放在spark集群的容器中,并相应地设置了hadoop\ conf\ dir。我能够在spark容器中为访问hadoop集群的主体成功地生成kerberos凭证缓存。但当我运行spark submit时,它失败了,worker中出现了下面的访问控制异常。注意-大师和工人们在单独的Kubernetes吊舱里运行。

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

我是否需要设置任何配置以使工作人员在spark独立模式下使用凭据缓存?

jecbmhm3

jecbmhm31#

您有一个巨大的问题:afaik spark standalone不处理任何类型的身份验证。
local 模式下,spark客户机/驱动程序/执行器都位于同一个jvm中,hadoop客户机libs可以直接访问本地缓存中的kerberos票证(因此spark不必管理任何东西)
yarn-cluster 模式下,spark客户机使用本地kerberos票证连接到hadoop服务并检索特殊的auth令牌,然后将这些令牌发送到运行驱动程序的yarn容器中;然后驱动程序将令牌广播给执行者
yarn-client 模式与快捷方式类似,因为spark驱动程序与客户端一起运行,并且令牌已经可用
有了Spark,你就完蛋了。
查阅https://stackoverflow.com/a/44290544/5162372 有关从spark到配置单元或hbase的kerberos身份验证的详细信息,请参阅 yarn-* 模式。
参见 --principal 以及 --keytab 长时间运行的作业(如流式处理)所需的参数,这些作业需要从驱动程序内部动态更新其kerberos凭据(因为spark客户端可能在启动后刚刚终止)
也许你可以试试 spark.yarn.access.namenodes 看看这是否会迫使spark客户机获取“额外的”kerberos令牌,但我不会打赌,因为在spark独立模式下,该属性可能会被忽略。
参见steve loughran关于在不安全的Yarn簇中运行spark时访问安全的Hive的评论

相关问题