【发布时间】:2019-02-07 23:13:58
【问题描述】:
我正在尝试连接到使用 kerberized 的 hdfs,但失败并出现错误
org.apache.hadoop.security.AccessControlException: SIMPLE 身份验证未启用。可用:[TOKEN,KERBEROS]
在创建 Spark 设置时,除了生成 Spark 工作容器所需的标准参数之外,我还需要添加哪些其他参数?
【问题讨论】:
标签: kubernetes pyspark
我正在尝试连接到使用 kerberized 的 hdfs,但失败并出现错误
org.apache.hadoop.security.AccessControlException: SIMPLE 身份验证未启用。可用:[TOKEN,KERBEROS]
在创建 Spark 设置时,除了生成 Spark 工作容器所需的标准参数之外,我还需要添加哪些其他参数?
【问题讨论】:
标签: kubernetes pyspark
在 hdfs-site.xml 属性文件中检查 <property>hadoop.security.authentication<property>。
在您的情况下,它应该具有 kerberos 或 token 的值。
或者您可以通过显式指定属性从代码中配置它:
Configuration conf = new Configuration();
conf.set("hadoop.security.authentication", "kerberos");
您可以找到有关与 hdfs here 安全连接的更多信息
【讨论】:
我也问了一个非常相似的问题here。
首先,请确认这是您的驱动程序 pod 还是执行程序 pod 上发生的错误。您可以通过查看驱动程序和执行程序开始运行时的日志来做到这一点。虽然我的 spark 作业仅在 master 上运行没有任何错误,但当我召唤 executors 时,我确实遇到了这个错误。解决方案是使用sidecar image。您可以在 ifilonenko 的 project 中看到它的实现,他在 demo 中提到了这一点。
这种方法的前提是将委托令牌(通过运行 kinit 获得)存储到共享持久卷中。然后可以将此卷挂载到您的驱动程序和执行程序 pod,从而使它们能够访问委托令牌,从而访问 kerberized hdfs。我相信您会收到此错误,因为您的执行程序当前没有访问 hdfs 所需的授权令牌。
附:我假设您已经看过 Spark 的 kubernetes documentation。
【讨论】: