簡體   English   中英

當master是k8s時,Spark 2.4.4是否支持轉發Delegation Tokens?

[英]Does Spark 2.4.4 support forwarding Delegation Tokens when master is k8s?

我目前正在設置一個 Kerberized 環境,以便在 Kubernetes 中使用 Livy 提交 Spark 作業。

到目前為止我所取得的成就:

  • 運行 Kerberized HDFS 集群
  • Livy 使用 SPNEGO
  • Livy 向 k8s 提交作業並生成 Spark 執行程序
  • KNIME 能夠從 k8s 集群外部與 Namenode 和 Datanodes 交互

為了實現這一點,我對涉及的組件使用了以下版本:

  • 火花 2.4.4
  • Livy 0.5.0(KNIME 目前唯一支持的版本)
  • Namenode 和 Datanode 2.8.1
  • Kubernetes 1.14.3

我目前正在努力解決的問題:

  • 從 Spark 執行器訪問 HDFS

嘗試從執行程序訪問 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;

以下是目前的狀態:

  1. KNIME 在成功挑戰 KDC 后連接到 HDFS(使用 Keytab + Principal)--> 工作
  2. KNIME 將暫存 jars 放入 HDFS --> 工作
  3. KNIME 向 Livy 請求新會話(SPNEGO 挑戰)--> 工作
  4. Livy 使用 k8s master / spawns executors 提交 Spark 作業 --> 工作
  5. KNIME 向 Livy 提交應由執行者執行的任務 --> 基本上可以工作
  6. 嘗試訪問HDFS讀取文件時出現前面提到的錯誤-->問題

由於 KNIME 將 jar 文件放在 HDFS 上,這些文件必須包含在 Spark 作業的依賴項中,因此能夠訪問 HDFS 非常重要。 (例如,KNIME 要求它能夠從數據集中檢索預覽數據)

我試圖找到解決方案,但不幸的是,還沒有找到任何有用的資源。 我查看了已檢查的UserGroupInformation.getCurrentUser().getTokens() 但是那個集合似乎是空的。 這就是為什么我認為沒有可用的委托令牌。

有沒有人曾經實現過這樣的運行並且可以幫助我解決這個問題?

謝謝大家!

對於為此苦苦掙扎的每個人:花了一段時間才找到為什么這不起作用的原因,但基本上它與 Spark 2.4.4 的 Kubernetes 實現有關。 沒有用於定義覆蓋CoarseGrainedSchedulerBackendfetchHadoopDelegationTokensKubernetesClusterSchedulerBackend

已經有一個pull request將通過將機密傳遞給包含委托令牌的執行者來解決這個問題。 它已經被拉入 master 並在 Spark 3.0.0-preview 中可用,但至少在 Spark 2.4 分支中不可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM