MaxCompute2.0 對開源係統的支持與融合
要:在2017杭州雲棲大會阿裏雲大數據計算服務(MaxCompute)專場上,阿裏巴巴高級技術專家李睿博為大家分享了阿裏雲大數據計算服務MaxCompute對於開源係統的支持和融合,以及在擁抱開源和生態的時候阿裏巴巴的技術團隊遇到過哪些問題和挑戰。
本文內容根據嘉賓演講視頻以及PPT整理而成。
在2016年杭州雲棲大會上,大數據計算服務團隊已經分享過MaxCompute在開源方麵的支持和融合了,那次分享的主題叫做“MaxCompute的生態開放之路”。其實在阿裏巴巴自己的曆史上的早些時候存在過Hadoop和自研的大數據平台長期共存的時期,所以關於MaxCompute和開源生態之間的爭論有很多。但是就計算服務團隊而言,對於開源秉持的是非常開放的態度。去年講支持開源,今年的目標則是將MaxCompute打造成為阿裏巴巴自研的一站式的數據解決方案,為了實現這個目標,今年更換了一個詞叫做融合,從支持到融合的轉變,阿裏巴巴還是做了很多事情的。
如下圖所示,從技術棧的角度來看,這也是這幾年從用戶接口層麵成立開源係統一步一步做下來的大概這樣的幾個層次。最早是對於開源的或者事實標準的工具層麵進行接入,希望用戶可以更加方便地接入MaxCompute的係統,然後在編程接口層麵做了兼容,這樣主要是為了保護用戶的投資,包括幫助集團內部“登月”的過程更加平滑,今年的最新工作則是對於開源引擎做了更多的融合工作。
在開源協議層麵主要的關注點是JDBC、Hive的協議,這裏無外乎是讓已有的支持JDBC的工具可以直接接入到MaxCompute係統上來。如下圖右側所示,可以通過像JDBC驅動、Zeppelin、Workbench、Pentaho、TalenD這樣的數據分析工具是可以直接對接到MaxCompute上麵來做數據分析的。當然JDBC也提供了一個標準的JDBC編程接口,這樣對於用戶而言,編程成本更小,可以直接把之前在數據庫上使用的一些代碼拿過來使用。在Hive Thrift這一層,提供了Hive Thrift協議的兼容接口,在這一層之上基本上所有的Hive生態鏈都可以支持,包括Hive的ODBC驅動、Hive的命令行工具等。除此之外還有ETL工具支持,這一部分主要負責對於多種數據源數據的導入導出。
除了協議和工具的支持,MaxCompute還打通了用戶接入係統的第一層門檻,也就是用戶可以避開阿裏巴巴自研的工具鏈直接對接到MaxCompute係統上。
而接下來需要麵對的問題就是工具可以對接上來,但是在工具中所寫的SQL在一兩年之前還需要寫MaxCompute所定義的SQL,而這個SQL與Hive SQL、標準的SQL以及Oracle的SQL還是會有些區別的,這就會導致之前的代碼難以遷移。MaxCompute的SQL團隊去年的時候也花費了很大的精力跟隨MaxCompute 2.0推出了一係列特性來對於Hive做了全麵的兼容,保護了用戶的代碼投資,可以讓用戶更加平滑地遷移到MaxCompute上來,包括現在可以完整兼容Hive的類型係統、完整兼容Hive的內建UDF甚至包括用戶自己為Hive開發的UDF也可以直接搬到MaxCompute的SQL裏麵運行,並且目前也已經支持了外表,也就是數據可以不隻是在MaxCompute裏麵,其可以在外部的OSS等的任何地方。MaxCompute SQL在語法層麵也做了相當多的細節改進,使得其可以兼容Hive的語法。
可能80%以上的用戶都是通過SQL的接口來使用MaxCompute係統的,但是也有很多傳統的數據分析師是通過R語言進行數據分析,所以很多MaxCompute也做了RODPS,這是R上的插件,當將這個插件裝到R上之後就直接打通了從R到MaxCompute的橋梁,可以直接將R的table直接轉化為DataFrame。後續可以在使用R自己生態上麵使用R原生的DataFrame進行分析和各種各樣的報表展示,這樣就不需要用戶將數據導出來再導入到R裏麵去的繁瑣過程。
既然提到了R,也要提到Python。因為目前Python社區在通用編程以及大數據分析方麵的上漲勢頭也非常好。像在Python社區中的Pandas DataFrame這套API也是數據分析師非常喜歡的編程接口。MaxCompute在Python SDK的基礎之上提供了一套高度兼容Pandas DataFrame的自研DataFrame,這套自研DataFrame的不同點在於其實際執行是在MaxCompute裏麵,而剛才提到的R則是將數據導入到R裏麵進行單機的分析。在這邊可以做到對於一個MaxCompute表建成一個DataFrame,然後再用像一個DataFrame做GroupBy或者Filter等計算,這一切都發生在MaxCompute的服務端,這樣就可以直接給社區的已有代碼賦予大數據計算的能力,也希望通過這樣的形式把MaxCompute的計算能力賦予給社區。同時也注意到Python社區中Jupyter Notebook這些工具鏈非常好用,所以也將DataFrame做了很多的可視化集成工作,可以在Notebook上麵實現一些展示效果非常好的信息。
當完成了以上這些工作之後,在協議、工具以及編程接口方麵已經有了比較大的進步或者說比較好的支持,但是還是不得不麵臨非常多的用戶的問題,比如MaxCompute對於Spark API的支持等問題。因為開源的計算引擎非常多,每種計算引擎都是針對各自的細分場景的。其好處是用戶最開始在使用的時候可以快速搭建,能夠很快地上手,學習資料也比較多,但是總會有一些問題,比如規模或者資源利用效率的問題等,用戶就會想這份作業通過現有的係統能不能遷移到MaxCompute上來托管給阿裏雲的服務,這個時候就會麵臨這樣的選擇,這就和集團內的“登月”計劃的初衷是一樣的。當然“登月”的效果是大家都想要的,因為數據都放在一起之後,數據所產生的威力是非常大的,但是“登月”的過程,大家都想輕鬆一些。
之前計算服務團隊也對於開源的API的兼容做了很多嚐試,如果用一套自研的計算引擎來兼容各種各樣的API是不太現實的事情,所以後來轉換了思路,考慮能否在保持自研優勢的基礎之上更好地擁抱開源生態。在保持數據存儲、資源調度以及安全控製的統一的基礎之上,將開源的計算引擎也直接運行在MaxCompute平台之上,這也是服務計算團隊今年主要做的事情,也就是聯合計算平台,通過將開源的係統運行在MaxCompute平台上使得MaxCompute獲得更好的兼容能力。這也就是對於開源的態度從支持走向融合,希望通過MaxCompute提供一站式的大數據解決方案。
接下來分享一下聯合計算平台,剛才提到了三個統一,對於這三個統一而言,真的要將其實現就會變成這四個挑戰。
因為開源的係統通常會有比如一套Spark集群、一套Flink集群等,這些往往都是獨立的集群,需要做資源調度的整合。通常開源係統中的用戶權限控製相對比較弱,大家可能會把集群拆分成為多個來做權限的隔離。但是因為MaxCompute是一個統一的SaaS服務,那麼在用戶的鑒權、權限控製方麵以及運行時的隔離方麵有很多的工作需要做。最後當數據都放在一起之後,其實也需要有讓Spark API以及其他的API能夠訪問已經在MaxCompute裏麵數據的能力,那麼就是所提到的數據集成的這些內容。麵臨這些挑戰,接下來會用一個例子來講聯合計算平台是怎樣實現的。
下圖是標準的SparkOnYarn的標準的作業的簡單架構示意圖,當然在這裏為了簡化並沒有將所有的角色畫出來。這裏可以看到通過一個客戶端可以提交一個Spark作業,這個Spark作業會有自己的一個Master,Master會向Resource Manager申請資源,然後Resource Manager通知Node Manager將Spark的Container啟動起來。對於Spark作業而言就變成了一個Spark+若幹Container這樣的一個結構。在作業外麵還有一個Browser可以直接訪問到App Master的WebUI上麵,或者在運行完成之後會下沉到HistoryServer上麵,可以來看作業的運行狀態。這是一個標準的Spark的運行方式。
聯合計算平台所做的事情是這樣的,把像是Spark或者其他的開源計算引擎包裝成MaxCompute內部的一個Task,在這裏叫做CupidTask。然後通過MaxCompute統一的restfulAPI提交CupidTask,這裏用戶的認證以及鑒權都是在統一的接入層進行的,也就是說在這裏就杜絕了用戶訪問到沒有權限訪問的Spark資源,這樣的SparkTask會給每個角色外麵都包裝一個管理者角色,叫做CupidMaster和CupidWorker。在資源調度這層其實是由CupidMaster來代理的,這樣就可以統一地走飛天的資源調度,然後由CupidMaster代理了APPMaster對於資源的管理。
因為開源的代碼寫起來比較靈活,而作為運行在一起的Service也需要保護用戶的數據安全,所以開源代碼需要嚴格地放在隔離的環境中,而不會看到和自己的數據無關的地方,而自己的數據是通過CupidWorker來實現的,所以開源代碼所能夠看到的數據一定是通過授權和認證體係同意之後才能訪問的數據並且通過CupidWorker同步給下麵的容器。通過這樣的方式將標準的Spark作業變成了一種MaxCompute作業,這樣就實現了某種程度的混跑,所以數據是同一份,既可以使用MaxCompute自己的SQL來處理這份數據,也可以使用Spark數據來處理這份數據。
下圖所示的是運行的展示效果,其實與原生社區的版本在運行起來基本上看不出有什麼區別。
MaxCompute與開源的融合,在協議和工具層麵做的一些支持都是之前在MaxCompute RestfulAPI服務之上通過SDK來實現的。而在MaxCompute裏麵的組件也是對於開源進行了支持,包括自己的SQL對於Hive做了非常多的兼容工作,另外通過聯機計算平台的形式將開源的係統遷移到MaxCompute平台裏麵。目前專有雲的版本已經有了支持Spark等的版本,借助於聯合計算平台,Spark等可以天然地在外圍作為開源API進行支持,整個的這套資源都是架構在飛天體係之上,希望通過融合的架構提供給用戶以更加靈活的選擇。用戶可以將已有的數據和應用搬遷上來,用原來的Spark或者機器學習作業繼續在上麵運行。如果遇到問題,也可以同一份數據既落到MaxCompute裏麵也可以直接對於這份數據使用PAI引擎進行計算,這樣就可以產生更大的價值。
未來,我們也希望將聯合計算平台的能力逐步地開放出來,可以方便地將開源社區的成果直接應用到MaxCompute體係中。
MaxCompute招聘信息:DT時代,與堅持夢想者同行!
阿裏巴巴大數據-玩家社區 https://yq.aliyun.com/teams/6/
---阿裏大數據博文,問答,社群,實踐,有朋自遠方來,不亦說乎……
最後更新:2017-10-25 17:34:06