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-operator2 譯文
翻譯開始這兩部分的博客系列里,我們將介紹如何使用 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.yamlSpark 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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据实训报告_教学大数据实训平台解决方
- 下一篇: jfinal获取url链接上面传来的st