如何在Kubernetes上運(yùn)行Apache Spark
譯文【51CTO.com快譯】Empathy公司平臺(tái)工程技術(shù)負(fù)責(zé)人Ramiro Alvarez Fernandez對于如何在Kubernetes上使用Spark以擺脫對云計(jì)算提供商的依賴,以及在Kubernetes上運(yùn)行Apache Spark進(jìn)行了介紹,并分享了這一過程的挑戰(zhàn)、架構(gòu)和解決方案等詳細(xì)信息。
面臨的挑戰(zhàn)
對于Empathy公司來說,生產(chǎn)中運(yùn)行的所有代碼都必須與云計(jì)算無關(guān)。Empathy公司通過使用Spark解決方案克服了之前對云計(jì)算提供商提供的解決方案的依賴:例如,EMR(AWS場景)、Dataproc(GCP場景)和HDInsight(Azure場景)。
這些云計(jì)算提供商的不同解決方案提供了一種在云上部署Spark的簡單方法。但是,當(dāng)企業(yè)在擴(kuò)大規(guī)模時(shí)會(huì)面臨一些限制,從而需要解決以下這些問題:
- 如何編排作業(yè)?
- 如何分配Spark作業(yè)?
- 如何安排夜間工作?
- 工作代碼配置在哪里?
- 如何傳播更改?
- 可以重復(fù)使用作業(yè)定義嗎?模板是什么?
- 能否通過代碼引用作業(yè)?
- 可以從本地主機(jī)測試嗎?
這些是在實(shí)施Spark作業(yè)時(shí)面臨的常見問題。使用Kubernetes解決這些問題可以節(jié)省工作人員的時(shí)間和精力,并提供更好的體驗(yàn)。
在Kubernetes上運(yùn)行Apache Spark可以提供以下好處:
- 可擴(kuò)展性:新解決方案應(yīng)可擴(kuò)展以滿足任何需求。
- 可靠性:新解決方案應(yīng)該監(jiān)控計(jì)算節(jié)點(diǎn),并在出現(xiàn)故障時(shí)自動(dòng)終止和替換實(shí)例。
- 可遷移性:新解決方案應(yīng)該可以部署在任何云計(jì)算解決方案中,避免對特定云計(jì)算提供商的依賴??傮w而言,這種方法可以節(jié)省考慮與不同云計(jì)算服務(wù)提供商協(xié)調(diào)、分發(fā)和調(diào)度Spark作業(yè)的時(shí)間。
- 成本效益:企業(yè)不需要采用云計(jì)算提供商的服務(wù),因此可以節(jié)省這些成本。
- 監(jiān)控:新解決方案應(yīng)該包括特別監(jiān)測。
- Kubernetes生態(tài)系統(tǒng):與其他工作負(fù)載一樣使用通用生態(tài)系統(tǒng),并提供持續(xù)部署、RBAC、專用節(jié)點(diǎn)池、自動(dòng)縮放等。
其好處與Empathy公司針對Kubernetes上運(yùn)行的Apache Flink的解決方案相同。
在Kubernetes運(yùn)行上的Apache Spark
Apache Spark是用于大數(shù)據(jù)處理的統(tǒng)一分析引擎,特別適用于分布式處理。Spark用于機(jī)器學(xué)習(xí),是目前最大的技術(shù)趨勢之一。
Apache Spark架構(gòu)
Spark Submit可用于將Spark應(yīng)用程序直接提交到Kubernetes集群。其流程如下:
(1)Spark Submit從客戶端發(fā)送到主節(jié)點(diǎn)中的Kubernetes API服務(wù)器。
(2)Kubernetes將調(diào)度一個(gè)新的Spark Driver pod。
(3)Spark Driver pod將與Kubernetes通信以請求Spark executor pod。
(4)新的executor pod將由Kubernetes調(diào)度。
(5)一旦新的executor pod開始運(yùn)行,Kubernetes會(huì)通知Spark Driver pod新的Spark executor pod已經(jīng)準(zhǔn)備就緒。
(6)Spark Driver pod將在新的Spark executor pod上調(diào)度任務(wù)。
Spark提交流程圖
可以使用SparkSubmit(普通方式)或使用Spark Operator來安排Spark應(yīng)用程序。
Spark Submit
Spark Submit是用于提交Spark應(yīng)用程序并在Spark集群上啟動(dòng)應(yīng)用程序的腳本。其具有的一些出色的功能包括:
- Kubernetes版本:不依賴于Kubernetes版本。
- Native Spark:它包含在Spark映像中。
- 非聲明性設(shè)置:需要計(jì)劃如何編排作業(yè)。
- 定義所需的K8s資源:掛載配置映射、卷、設(shè)置反關(guān)聯(lián)、節(jié)點(diǎn)選擇器等。
- 不需要CRD:不需要Kubernetes自定義資源。
Spark Operator
Spark Operator項(xiàng)目由谷歌公司開發(fā),現(xiàn)在是一個(gè)開源項(xiàng)目。它使用Kubernetes自定義資源來指定、運(yùn)行和顯示Spark應(yīng)用程序的狀態(tài)。其具有的一些出色的功能包括:
- 聲明性:應(yīng)用程序規(guī)范和通過自定義資源管理應(yīng)用程序。
- 計(jì)劃重啟:可配置的重啟策略。
- Kubernetes資源自動(dòng)定義:支持掛載configmaps和volumes,設(shè)置pod關(guān)聯(lián)性等。
- 依賴項(xiàng)注入:直接注入依賴項(xiàng)。
- 指標(biāo):支持收集應(yīng)用程序級(jí)指標(biāo)和驅(qū)動(dòng)程序/執(zhí)行程序指標(biāo)并將其導(dǎo)出到Prometheus。
- 開源社區(qū):每個(gè)人都可以做出貢獻(xiàn)。
Spark Submit vs Spark Operator的主要命令
上圖顯示了Spark Submit與Spark Operator的主要命令。
Empathy公司的解決方案更喜歡采用Spark Operator,因?yàn)樗试S比Spark Submit更快的迭代,在Spark Submit中,必須為每個(gè)用例創(chuàng)建自定義Kubernetes清單。
解決方案的詳細(xì)信息
為了解決挑戰(zhàn)部分提出的問題,ArgoCD和Argo Workflows可以提供幫助,同時(shí)還有CNCF項(xiàng)目的支持。例如,可以從Kubernete調(diào)度最喜歡的Spark應(yīng)用程序工作負(fù)載,以創(chuàng)建Argo Workflows并定義順序作業(yè)。
流程圖如下:
- 在git上定義更改。
- ArgoCD將git更改同步到Kubernetes集群(例如,創(chuàng)建一個(gè)Argo工作流模板)。
- Argo Workflows模板允許為多個(gè)Spark作業(yè)自定義輸入和重用配置,并基于Argo Workflows創(chuàng)建夜間作業(yè)。
解決方案流程圖
ArgoCD
ArgoCD是Kubernetes的GitOps持續(xù)交付工具。其主要好處是:
- GitOps:使用git存儲(chǔ)庫作為定義所需應(yīng)用程序狀態(tài)的真實(shí)來源。
- 聲明式設(shè)置:git上的一切。
- 可追溯性和自動(dòng)化:應(yīng)用程序部署可以跟蹤分支、標(biāo)簽等的更新。應(yīng)用程序部署將根據(jù)特定的目標(biāo)環(huán)境實(shí)現(xiàn)自動(dòng)化。
- WebUI:用于檢查部署的工作負(fù)載的外觀良好的用戶界面。
- Kubernetes體現(xiàn)了Kustomize、Helm、ksonnet、jsonnet等??梢赃M(jìn)行選擇。
更詳細(xì)的信息可以在其官方文檔中找到。
Argo Workflows
Argo Workflows是Kubernetes的工作流解決方案。主要好處是:
- 作業(yè)編排:這允許按順序編排作業(yè)或創(chuàng)建自定義DAG。
- 調(diào)度工作流:Cron native.。
- Spark應(yīng)用程序:在任何Kubernetes集群上輕松編排Spark應(yīng)用程序。
- 工作流模板:針對不同用例重復(fù)使用模板。輸入可以參數(shù)化。
- WebUI:用于檢查工作流程進(jìn)度的出色視覺用戶界面。
更詳細(xì)的信息可以在其官方文檔中找到。
監(jiān)測
一旦Prometheus掌握了這些指標(biāo),就需要一些Grafana儀表板進(jìn)行監(jiān)測。Apache Spark的自定義Grafana儀表板基于以下社區(qū)儀表板:
- ArgoCD儀表板
- Argo Workflow儀表板
- Apache Spark操作員儀表板
- Apache Spark應(yīng)用程序儀表板
結(jié)語
Empathy公司選擇Spark Operator、ArgoCD和Argo Workflows在Kubernetes上創(chuàng)建Spark應(yīng)用程序工作流解決方案,并使用GitOps傳播更改。本文所展示的設(shè)置已經(jīng)在生產(chǎn)環(huán)境中使用了大約一個(gè)月的時(shí)間,并且反饋很好。每個(gè)用戶都對工作流程感到滿意,而擁有一個(gè)適用于任何云提供商的單一工作流程,可以擺脫了單個(gè)云計(jì)算提供商的鎖定。
如果親自進(jìn)行測試,需要按照這些實(shí)際操作示例并享受從本地主機(jī)部署一些Spark應(yīng)用程序的樂趣,以及本指南中描述的所有設(shè)置:Hands-on Empathy Repo。
雖然還有很長的路要走,但會(huì)有更多的收獲。希望這一創(chuàng)新能幫助企業(yè)變得更加與云無關(guān)。
原文標(biāo)題:Running Apache Spark on Kubernetes,作者:Ramiro Alvarez Fernandez
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】