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),不再用爲每個工作包製作新的鏡像可以從阿里雲的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測試中,具體操作步驟記錄在了這篇博客裏。歡迎感興趣的同學一起討論。也可通過郵箱與筆者聯繫溝通。
————————————————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章