日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spark中local模式与cluster模式使用场景_Spark-Submit 和 K8S Operation For Spark

發布時間:2025/6/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spark中local模式与cluster模式使用场景_Spark-Submit 和 K8S Operation For Spark 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 Overview

本文翻譯自 Lightbend 的一篇文章,文章日期還比較新,2019/02/26。文章分為兩部分,翻譯也將分為兩個部分。附上文章鏈接如下:

https://www.lightbend.com/blog/how-to-manage-monitor-spark-on-kubernetes-introduction-spark-submit-kubernetes-operator

2 譯文

翻譯開始

這兩部分的博客系列里,我們將介紹如何使用 spark-submit 和 K8S 的 Operation for Spark。在 Part 1 中,我們會介紹到如何監控和管理部署在 K8S 的 Spark 集群。Part 2 里(譯文也在第二部分),我們將深入了解 K8S 的原生的 Operator for Spark。

不久前,Spark 在 2.3 版本的時候已經將 K8S 作為原生的調度器實現了,這意味著我們可以按照官網的介紹,利用 spark-submit 來提交 Spark 作業到 K8S 集群,就像提交給 Yarn 和 Mesos 集群一樣。

盡管通過這種方法,還是比較容易使用的,但是這里仍然有很多的諸如管理和監控的特性是用戶比較關注的,而 spark-submit 暫時無法提供的。這就是為什么 K8S 會去做一個 Operator for Spark 出來了,因為通過 Operator,作業管理和監控都可以用更 K8S 的方式來原生實現,使用 Operator 會讓使用 K8S 運行 Spark 作業更加容易。Operator for Spark 與其他 Operator 一樣,擴展了 K8S API,實現了 CRD,也就是自定義資源類型 Custom Resource。

本文的目的就是去比較 spark-submit 和 Operator for Spark,在易用性和使用體驗上的差異,也想為那些關注 Spark 和 K8S 生態的用戶和開發者、架構師等,去了解這兩種方式的一些利弊。以下是本文的一些 highlight。

關于 spark-submit

  • spark-submit 是 Apache Spark 項目的一部分
  • 在即將到來的 Spark 3.0,關于 Spark Pods 的配置上會跟 Operator 靠攏
  • 在管理 K8S 集群的 Spark 作業上有一定的局限性

關于 K8S 的 Operator for Spark

  • 一個將 Spark 作業提交給 K8S 集群的工具
  • 一個典型的基于 K8S Operator 模式的實現
  • 使用了 spark-submit 作為 hook
  • 支持定義 Spark Pods 的時候掛載 Volume 和 ConfigMap(Apache 2.4 并沒有提供的功能)
  • 有專用的 CLI 來管理 Spark 作業

2.2 A Deeper Look At Spark-Submit

spark-submit 用來提交 Spark 作業到 K8S 集群,就像在 YARN 和 Mesos 集群都可以。它也允許用戶傳遞一些可選的參數給 Spark Master。以下是一個典型的提交 Spark 作業到 K8S 集群的命令。

spark-submit 利用 pod watcher 來監控提交的過程,如果沒問題的話,結束的時候輸出如下圖。

CLI 這種模式是比較容易實現的,只需要一個支持提交 K8S 集群的版本的 Spark 部署。但這種方案還是有點弊端的,比如說不能針對提交過的作業提供更多的管理方法,又或者不允許 spark-submit 來定制 Spark 的 Pods,此種需求可能還是有必要的。當然,這個問題會在 Spark 3.0 得到解決。

2.3 How Does Spark-Submit Work

在 Client 模式,spark-submit 直接將 Spark 作業通過 Spark 環境變量初始化了,這意味著,Spark 的 Driver 運行在了 spark-submit 端,而 Spark 的 Executor 是運行在 K8S 集群的。

在 Cluster 模式,spark-submit 代表了作業提交到 K8S 的帶哦度后端,是因為其通過 K8S 集群創建了 Driver 的 Pod,然后 Pods 再被 K8S 集群調度作為 Executor 來運行 Spark 作業。

2.4 A Look At Kubernetes Operator For Apache Spark

關于 Spark 的 Operator 是由 Google 的 GCP 團隊來做的,而且也已經開源了。Operator for Spark 實現了 Operator 的模式,將 Spark Application 的運行和管理封裝在了自定義資源 custom resources,以及定義了自定義的控制器 custom controller。

Operator 定義了兩個自定義資源,分別是 SparkApplication 和 ScheduledSparkApplication。他們是 Spark 作業為了運行在 K8S 上的一層抽象。通過自定義資源,可以與提交到 K8S 集群的 Spark 作業交互,并且使用原生的 K8S 工具,例如 kuberctl 來調控這些作業。

自定義資源就是讓你存儲和獲取這些結構化的 Spark 作業。當和 custom controller 結合的時候,就會變成真正的解釋式的 API,這樣可以讓你指定需要的 Spark 作業狀態,以及嘗試去匹配真實狀態的 Spark 作業。

在上圖中,你可以看到一旦作業被描述為 spark-pi.yaml 文件,并且通過 kubectl/sparkctl 提交到 K8S 的 API server,custom controller 就會將這個文件轉化為 CRD 對象,也就是 SparkApplication 或者 ScheduledSparkApplication。

然后 K8S 的相關參數以及 spark-submit 的參數就會結合一起,提交給 API Server,然后就會像寫 spark-submit 腳本一樣,在 K8S 集群中創建 Driver Pod 以及 Executor Pod。

這里再比較一下 spark-submit 和 Operator for Spark 的一些異同點。

首先,當一個 Volume 或者 ConfigMap 在 Pod 被設置了,一個修改的確定 webhook 會攔截 Pod 的創建請求,并且在 Pods 被持久化之前進行修改。

然后就是 Operator 有一個組件叫做 pod event handler,可以檢測 Spark Pods 的事件,以及根據 SparkAppclication 和 ScheduledSparkApplcation 的事件不斷地更新自己的狀態。

Spark 作業的另一個表現形式可以是 ConfigMap,但是在實現 Spark 作業的這種情況下,還是建議用 CRD,原因在于,如果希望將 Spark 作業更好的集成到 K8S 集群里,那么使用 CRD 這種方案,可以使用現成的 K8S 的工具棧,比如 kubectl,這些工具可以更方便的去構建或者更新一個 Spark 作業。

2.4 How Kubernetes Operator For Spark Works

SparkApplication 和 ScheduledSparkApplication 這些 CRD,可以用 YAML 文件來定義,并且被 K8S 解釋式的執行。與 spark-submit 腳本不同的是,Operator 是需要安裝的,Helm chart 是常用的工具,而已管理 K8S 的 charts 等資源。Helm chart 可以視為是一組文件,可以描述 K8S 相關的一些資源,并且可以作為一個單元來部署。

helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator helm install incubator/sparkoperator --namespace spark-operator

安裝成功的輸出如下圖可見。

這會安裝需要的 CRDs 和自定義的控制器,并且設置 RBAC,安裝了可變的權限 webhook,并且配置了 Prometheus 來做監控。

pi.yaml

Spark Application 控制器負責監控 SparkApplication CRD 對象,以及提交 Spark Application。在 App 被提交之后,控制器的監視 Application 的狀態,例如 SUBMITTED, RUNNING, COMPLETED 等等。

Application 的狀態轉移可以從 Operator 的 Pod 日志中提取出來。下面是 SUBMITEED -> RUNNING 的轉移。

3 Summary

本文主要介紹了利用 Spark 官方對 K8S 的支持,利用 spark-submit 提交 Spark 作業到 K8S 集群的方式,以及利用 K8S (非官方)的 Operator for Spark 來運行 Spark 作業的異同點。

顯然本文反復提示的,就是 spark-submit,也就是目前 spark 2.4 提供的功能中,是不能對 Spark 作業進行交互式的參數調整的,而 Operator 方案相比 spark-submit 則是天然地支持這種方式。

總結

以上是生活随笔為你收集整理的spark中local模式与cluster模式使用场景_Spark-Submit 和 K8S Operation For Spark的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。