我目前正在设置一个Kerberized环境,以便使用Kubernetes中的Livy提交Spark Jobs。
到目前为止我已经取得的成就:
为此,我对所涉及的组件使用了以下版本:
我目前正在努力解决的问题:
尝试从执行程序访问HDFS时,我当前收到的错误消息如下:
org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]; Host Details : local host is: "livy-session-0-1575455179568-exec-1/10.42.3.242"; destination host is: "hdfs-namenode-0.hdfs-namenode.hdfs.svc.cluster.local":8020;
以下是当前状态:
由于KNIME将jar文件放在必须包含在Spark Jobs依赖项中的HDFS上,因此能够访问HDFS非常重要。 (例如,KNIME要求它能够从数据集中检索预览数据)
我试图找到解决方案,但是不幸的是,尚未找到任何有用的资源。
我查看了选中的UserGroupInformation.getCurrentUser().getTokens()
的代码。
但是那个集合似乎是空的。这就是为什么我认为没有可用的委托令牌的原因。
有人能做到这样的事情并且可以帮助我吗?
谢谢大家!
答案 0 :(得分:2)
对于每个为此苦苦挣扎的人:
花了一段时间才找到为什么它不起作用的原因,但基本上它与Spark自2.4.4起的Kubernetes实现有关。
在fetchHadoopDelegationTokens
中没有为CoarseGrainedSchedulerBackend
的{{3}}定义替代。
已经有KubernetesClusterSchedulerBackend
可以通过将秘密传递给包含委派令牌的执行者来解决此问题。
它已经被拉入master并可以在Spark 3.0.0-preview中使用,但至少在Spark 2.4分支中尚不可用。