【问题标题】:How to connect to a kerberoized hdfs from Spark on Kubernetes?如何从 Kubernetes 上的 Spark 连接到 kerberoized hdfs?
【发布时间】:2019-02-07 23:13:58
【问题描述】:

我正在尝试连接到使用 kerberized 的 hdfs,但失败并出现错误

org.apache.hadoop.security.AccessControlException: SIMPLE 身份验证未启用。可用:[TOKEN,KERBEROS]

在创建 Spark 设置时,除了生成 Spark 工作容器所需的标准参数之外,我还需要添加哪些其他参数?

【问题讨论】:

    标签: kubernetes pyspark


    【解决方案1】:

    在 hdfs-site.xml 属性文件中检查 <property>hadoop.security.authentication<property>
    在您的情况下,它应该具有 kerberostoken 的值。
    或者您可以通过显式指定属性从代码中配置它:

    Configuration conf = new Configuration();
    conf.set("hadoop.security.authentication", "kerberos");
    

    您可以找到有关与 hdfs here 安全连接的更多信息

    【讨论】:

    • 感谢@ruslangm 的回答。我确实尝试将该参数添加到配置中。但它没有工作,仍然得到同样的错误。还试图给 keytab 文件和主体,但没有工作。
    • @AlokGogate 看来,我弄错了,你需要在 core-site.xml 而不是 hdfs-site.xml 中更改此属性。您可以再试一次并报告结果吗?
    • 对这些文件进行了更改,读取了我的 spark 容器中的文件,但仍面临同样的问题。我的 spark 在 kubernetes 上运行,而不是在 Yarn 模式下
    【解决方案2】:

    我也问了一个非常相似的问题here

    首先,请确认这是您的驱动程序 pod 还是执行程序 pod 上发生的错误。您可以通过查看驱动程序和执行程序开始运行时的日志来做到这一点。虽然我的 spark 作业仅在 master 上运行没有任何错误,但当我召唤 executors 时,我确实遇到了这个错误。解决方案是使用sidecar image。您可以在 ifilonenko 的 project 中看到它的实现,他在 demo 中提到了这一点。

    这种方法的前提是将委托令牌(通过运行 kinit 获得)存储到共享持久卷中。然后可以将此卷挂载到您的驱动程序和执行程序 pod,从而使它们能够访问委托令牌,从而访问 kerberized hdfs。我相信您会收到此错误,因为您的执行程序当前没有访问 hdfs 所需的授权令牌。

    附:我假设您已经看过 Spark 的 kubernetes documentation

    【讨论】:

      猜你喜欢
      • 2019-11-02
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      相关资源
      最近更新 更多