Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 在Kubernetes集群上运行的Spark单机集群中使用Hadoop集群进行Kerberos身份验证_Apache Spark_Hadoop_Kubernetes_Kerberos_Apache Spark Standalone - Fatal编程技术网

Apache spark 在Kubernetes集群上运行的Spark单机集群中使用Hadoop集群进行Kerberos身份验证

Apache spark 在Kubernetes集群上运行的Spark单机集群中使用Hadoop集群进行Kerberos身份验证,apache-spark,hadoop,kubernetes,kerberos,apache-spark-standalone,Apache Spark,Hadoop,Kubernetes,Kerberos,Apache Spark Standalone,我已经在Kubernetes上建立了Spark独立集群,我正在尝试连接到Kubernetes上没有的Kerberized Hadoop集群。我已经将core-site.xml和hdfs-site.xml放在Spark集群的容器中,并相应地设置了HADOOP_CONF_DIR。我能够在Spark容器中为访问Hadoop集群的主体成功生成kerberos凭据缓存。但当我运行spark submit时,它失败了,worker中出现了低于访问控制的异常注意-船长和工人在单独的Kubernetes吊舱中运

我已经在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单机模式下使用凭据缓存

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

  • local
    模式下,Spark客户端/驱动程序/执行程序都位于同一个JVM中,Hadoop客户端libs可以直接访问本地缓存中的Kerberos票证(因此Spark不必管理任何东西)
  • Thread cluster
    模式下,Spark客户端使用本地Kerberos票证连接到Hadoop服务,并检索特殊的auth令牌,然后将其发送到运行驱动程序的Thread容器中;然后,驱动程序将令牌广播给执行者
  • warn-client
    模式中,它与快捷方式类似,因为Spark驱动程序与客户端一起运行,并且令牌已经可用
  • 有了火花,你就完蛋了
有关在
spirn-*
模式下从Spark到配置单元或HBase的Kerberos身份验证的更多详细信息,请参阅

参见长时间运行的作业(例如,流)需要从驱动程序内部动态更新Kerberos凭据所需的
--principal
--keytab
参数(因为Spark客户端可能在启动后刚刚终止)


也许您可以尝试
spark.Thread.access.namenodes
,看看这是否会迫使spark客户端获取“其他”Kerberos令牌,但我不会打赌,因为该属性在spark独立模式下可能会被忽略


参见Steve Loughran在

上的评论,请注意,访问S3存储桶(通过模拟HDFS的S3A连接器)要简单得多,因为用于身份验证的“机密”由连接器管理,并且对Spark本身完全透明。其他类型的对象存储也一样(Azure、Google、OpenStack Swift)