我已经在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独立模式下使用凭据缓存?
1条答案
按热度按时间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的评论