如何在 Serverless K8s 集羣中低成本運行 Spark 數據計算?

頭圖.jpg

做者 | 柳密 阿里巴巴阿里雲智能 本文整理自《Serverless 技術公開課》html

導讀:本節課主要介紹如何在 Serverless Kubernetes 集羣中低成本運行 Spark 數據計算。首先簡單介紹下阿里雲 Serverless Kubernetes 和 彈性容器實例 ECI 這兩款產品;而後介紹 Spark on Kubernetes;最後進行實際演示。git

產品介紹

阿里雲彈性容器實例 ECI

ECI 提供安全的 Serverless 容器運行服務。無需管理底層服務器,只須要提供打包好的 Docker 鏡像,便可運行容器,並僅爲容器實際運行消耗的資源付費。github

1.PNG

阿里雲容器服務產品族

2.PNG

不管是託管版的 Kubernetes(ACK)仍是 Serverless 版 Kubernetes(ASK),均可以使用 ECI 做爲容器資源層,其背後的實現就是藉助虛擬節點技術,經過一個叫作 Virtual Node 的虛擬節點對接 ECI。apache

3.PNG

Kubernetes + ECI

有了 Virtual Kubelet,標準的 Kubernetes 集羣就能夠將 ECS 和虛擬節點混部,將 Virtual Node 做爲應對突發流量的彈性資源池。安全

4.PNG

ASK(Serverless Kubernetes)+ ECI

Serverless 集羣中沒有任何 ECS worker 節點,也無需預留、規劃資源,只有一個 Virtual Node,全部的 Pod 的建立都是在 Virtual Node 上,即基於 ECI 實例。服務器

5.PNG

Serverless Kubernetes 是以容器和 Kubernetes 爲基礎的 Serverless 服務,它提供了一種簡單易用、極致彈性、最優成本和按需付費的 Kubernetes 容器服務,其中無需節點管理和運維,無需容量規劃,讓用戶更關注應用而非基礎設施的管理。less

Spark on Kubernetes

Spark 自 2.3.0 開始試驗性支持 Standalone、on YARN 以及 on Mesos 以外的新的部署方式:Running Spark on Kubernetes,現在支持已經很是成熟。運維

Kubernetes 的優點

6.PNG

Spark on kubernetes 相比於 on Yarn 等傳統部署方式的優點:分佈式

一、統一的資源管理。不管是什麼類型的做業均可以在一個統一的 Kubernetes 集羣中運行,再也不須要單獨爲大數據做業維護一個獨立的 YARN 集羣。 二、傳統的將計算和存儲混合部署,經常會爲了擴存儲而帶來額外的計算擴容,這其實就是一種浪費;同理,只爲了提高計算能力,也會帶來一段時期的存儲浪費。Kubernetes 直接跳出了存儲限制,將離線計算的計算和存儲分離,能夠更好地應對單方面的不足。 三、彈性的集羣基礎設施。 四、輕鬆實現複雜的分佈式應用的資源隔離和限制,從 YRAN 複雜的隊列管理和隊列分配中解脫。 五、容器化的優點。每一個應用均可以經過 Docker 鏡像打包本身的依賴,運行在獨立的環境,甚至包括 Spark 的版本,全部的應用之間都是徹底隔離的。 六、大數據上雲。目前大數據應用上雲常見的方式有兩種:1)用 ECS 自建 YARN(不限於 YARN)集羣;2)購買 EMR 服務,目前全部雲廠商都有這類 PaaS,現在多了一個選擇——Kubernetes。性能

Spark 調度

7.PNG

圖中橙色部分是原生的 Spark 應用調度流程,而 Spark on Kubernetes 對此作了必定的擴展(黃色部分),實現了一個 KubernetesClusterManager。其中 **KubernetesClusterSchedulerBackend 擴展了原生的CoarseGrainedSchedulerBackend,**新增了 **ExecutorPodsLifecycleManager、ExecutorPodsAllocator 和KubernetesClient **等組件,實現了將標準的 Spark Driver 進程轉換成 Kubernetes 的 Pod 進行管理。

Spark submit

在 Spark Operator 出現以前,在 Kubernetes 集羣提交 Spark 做業只能經過 Spark submit 的方式。建立好 Kubernetes 集羣,在本地便可提交做業。

做業啓動的基本流程:

一、Spark 先在 K8s 集羣中建立 Spark Driver(pod)。 二、Driver 起來後,調用 K8s API 建立 Executors(pods),Executors 纔是執行做業的載體。 三、做業計算結束,Executor Pods 會被自動回收,Driver Pod 處於 Completed 狀態(終態)。能夠供用戶查看日誌等。 四、Driver Pod 只能被用戶手動清理,或者被 K8s GC 回收。

直接經過這種 Spark submit 的方式,參數很是很差維護,並且不夠直觀,尤爲是當自定義參數增長的時候;此外,沒有 Spark Application 的概念了,都是零散的 Kubernetes Pod 和 Service 這些基本的單元,當應用增多時,維護成本提升,缺乏統一管理的機制。

Spark Operator

Spark Operator 就是爲了解決在 Kubernetes 集羣部署並維護 Spark 應用而開發的,Spark Operator 是經典的 CRD + Controller,即 Kubernetes Operator 的實現。

9.PNG

下圖爲 SparkApplication 狀態機:

10.PNG

Serverless Kubernetes + ECI

那麼,若是在 Serverless Kubernetes 集羣中運行 Spark,其其實是對原生 Spark 的進一步精簡。

11.PNG

存儲選擇

12.PNG

對於批量處理的數據源,因爲集羣不是基於 HDFS 的,因此數據源會有不一樣,須要計算與存儲分離,Kubernetes 集羣只負責提供計算資源。

  • 數據源的存儲能夠採用阿里雲對象存儲 OSS、阿里雲分佈式存儲 HDFS 等。
  • 計算的臨時數據、Shuffle 數據能夠採用 ECI 提供的免費的 40GB 的系統盤存儲空間,還能夠自定義掛載阿里雲數據盤、以及 CPFS/NAS 文件系統等,都擁有很是不錯的性能。

實操演示

本次實操分別展現 TPC-DS 和 WordCount 兩個應用,點擊便可觀看具體操做演示過程

Serverless 公衆號,發佈 Serverless 技術最新資訊,聚集 Serverless 技術最全內容,關注 Serverless 趨勢,更關注你落地實踐中的遇到的困惑和問題。

相關文章
相關標籤/搜索