天天看點

Spark on Kubernetes與阿裡雲的深度整合

最近,筆者嘗試将Spark on Kubernetes與阿裡雲深度整合,設計一個開箱即用的Spark on Kubernetes鏡像。

首先通過Terraform在阿裡雲上一鍵建立和銷毀Kubernetes叢集。然後寫了一個腳本生成Spark鏡像,使其在Kubernetes上運作時可以直接讀寫阿裡雲OSS上的資料。最後還寫了一個spark-submit腳本,可以讓鏡像動态地從阿裡雲OSS上下載下傳需要運作的主程式包(jar)。

功能:

一次編譯,多次運作,同時支援共有雲、私有雲、以及混合雲。使用者隻需專注于Spark job本身,無需擔心運維。解耦計算與存儲,不再需要HDFS叢集,更加節省費用。避免了正常做法中的二次資源排程,進一步提升資源管理效率。每一個job都可以指定資源,實作更好的資源隔離。自帶彈性伸縮屬性,無需被叢集太小所困擾。

優勢:

鏡像可以部署到共有雲、私有雲、或混合雲上的任意一個Kubernetes叢集

鏡像可以直接讀寫阿裡雲的對象存儲服務(OSS),節省了HDFS的費用

可以從阿裡雲的OSS上自動下載下傳包含Spark job的工作包(jar),不再用為每個工作包制作新的鏡像

特點:

使用Kubernetes原生排程的Spark on Kubernetes是對現有的Spark on Yarn/Mesos的資源使用方式的革命性的改進,主要表現在以下幾點:

1、Kubernetes原生排程:不再需要二層排程,直接使用Kubernetes的資源排程功能,跟其他應用共用整個kubernetes管理的資源池;

2、資源隔離,粒度更細:原先yarn中的queue在Spark on Kubernetes中已不存在,取而代之的是Kubernetes中原生的namespace,可以為每個使用者分别指定一個namespace,限制使用者的資源quota;

3、細粒度的資源配置設定:可以給每個spark任務指定資源限制,實際指定多少資源就使用多少資源,因為沒有了像yarn那樣的二層排程(圈地式的),是以可以更高效和細粒度的使用資源;

4、監控的變革:因為做到了細粒度的資源配置設定,是以可以對使用者送出的每一個任務做到資源使用的監控,進而判斷使用者的資源使用情況,所有的metric都記錄在資料庫中,甚至可以為每個使用者的每次任務送出計量;

5、日志的變革:使用者不再通過yarn的web頁面來檢視任務狀态,而是通過pod的log來檢視,可将所有的Kubernetes中的應用的日志等同看待收集起來,然後可以根據标簽檢視對應應用的日志;

所有這些變革都可以讓我們更高效的擷取資源、更有效率的擷取資源!

筆者設計的Spark on Kubernetes在普通版本的基礎上,與阿裡雲深度整合,添加了一些比較實用的特性:

可以通過Terraform配置阿裡雲ACK Kubernetes叢集,一鍵建立和銷毀叢集,避免重複勞動以及不必要的叢集消耗

可以直接從阿裡雲OSS上擷取Spark所需jar包,避免重複打包鏡像

可以直接通過阿裡雲OSS讀寫資料,避免不必要的HDFS費用

目前正在免費Alpha測試中,具體操作步驟記錄在了

這篇部落格

裡。歡迎感興趣的同學一起讨論。也可通過郵箱與筆者聯系溝通。

————————————————