1. 程式人生 > >阿里大資料平臺MaxCompute初窺

阿里大資料平臺MaxCompute初窺

如下內容大多來自官方手冊、論壇等。

這個產品解決了什麼問題

概況

MaxCompute,舊名ODPS,是阿里的一款離線計算引擎。
底層基於阿里飛天、伏羲等阿里雲基礎套件,MaxCompute專注於離線計算部分。
對標產品:hadoop、spark等。
目前看,發展方向應該和很多公司用spark一致,主推以豐富的SQL來解決問題。畢竟sql相比MR等有較多的使用者需求。以前的No SQL產品,近兩年也大多都在增厚SQL解析這一層。而很多新增需求的設計和開發,也考慮了傳統資料庫使用者的使用習慣。

產品的功能

匯入匯出

支援批量方式,將全量資料匯入,使用tunnel。tunnel提供sdk,可以基於java開發自己的資料匯入匯出工具。但只能全量,基於表或者某個分割槽。不支援覆蓋性寫入,所以在用tunnel進行資料匯入的時候,資料是以追加的方式入庫的。tunnel上傳資料的時候,支援斷點續傳(因為tunnel是先傳輸資料到一個臨時位置,最後通過一次commit,將資料拷貝到目的庫)。
支援實時,增量的方式匯入資料,使用DataHub。

計算方式

支援的計算方式:
- SQL
- MapReduce

SQL

建議以SQL來進行計算,SQL語法中也刻意增加了MapReduce相關的部分。
支援常見的DDL、DML操作。
可以把專案空間等同於資料庫,把表等同於表。不過沒有主鍵、索引概念,不支援update、delete。
刪除資料只能:按分割槽刪除(drop分割槽表再新建),按表刪除(無分割槽表支援truncate)。
支援join、group by、order by、like操作,能夠支撐常規的分析計算類SQL操作,但阿里自研的SQL標準多少都有一些限制(譬如V0.9版本以前的ADS…),但總體看,MaxCompute的SQL支撐很完整。
有常見內建函式(數學、視窗、聚合等),也支援自定義函式。
自定義函式的寫法和常規資料庫不一致,要先用java或python完成函式的主體功能,上傳到MaxCompute成為資源,然後通過SQL語句再封裝一下,形成函式。
支援ACL授權(grant/revoke),支援專案空間、表兩級的ACL授權。雖然官方提到支援列級別授權,但列級別授權是通過安全策略實現的:LabelSecurity。

總體來說,你把MaxCompute當做一個常規資料庫來用,可以。因為很多SQL語句遮蔽掉了底層的計算機制(task、worker)。在文件中看到的例項、資源、任務等概念,都和底層計算相關,在進行效能優化和深入進階前不用考慮。

我認為什麼人適合用SQL:
1. 常規數倉使用者,不過重關注計算時效性的
2. 有較多的使用者,使用者技術能力參差不齊的群體
3. 傳統資料庫轉型過來,還未深入使用的
4. 玩的很溜,有很豐富的自定義資源函式,用SQL來串起來使用的

MapReduce

MaxCompute支援3中MapReduce
1. 早期MR
2. MRv2
3. 基本相容hadoop平臺的MR

MR只是實現自定義函式的一種方式,是一種計算思路。更多的是用MR來實現自己的功能函式,包括一些積累的演算法、計算邏輯等的使用和封裝。

SDK

大公司的產品,開發套件做的就是好。有豐富的SDK。idea、eclipse等IDE支撐很好。
有java、python sdk,包括函式開發、資料匯入匯出等。
通過maven進行SDK版本控制,上手很快。

思考

MaxCompute是經歷過阿里內部一些計算場景試煉的,找到合適的場景,用起來特別順手。
主推公有云,所以在安全上做的很好,隔離、policy、acl等做的都很完善。
分割槽嘛,有些吐槽,以後再細聊吧,畢竟今天頭一篇。

MaxCompute除了上面一些常規的功能價值外,我認為比較重要的是,他在阿里生態中,佔據了重要的位置,周邊配套很完善(tunnel、datahub、dataworks、studio等)。
大資料是解決一個領域的全鏈路問題的,不能簡單地針對幾個問題去選擇產品。

稍後扔一份從阿里資料裡提煉的,類規格的東西出來。