一、MaxCompute是什么椅文?
????MaxCompute(原ODPS喂很,Open Data Processing Service)是一項大數(shù)據(jù)計算服務(wù)惜颇,它能提供快速、完全托管的PB級數(shù)據(jù)倉庫解決方案少辣。主要提供了四大功能:數(shù)據(jù)通道凌摄、結(jié)構(gòu)化存儲、多計算模型漓帅、數(shù)據(jù)安全管理锨亏。
1.數(shù)據(jù)通道
批量/歷史數(shù)據(jù)通道--tunnel
? ? ?適合于全量數(shù)據(jù)或歷史數(shù)據(jù)的導入、導出忙干;
實時/增量數(shù)據(jù)通道--DataHub
????? 該服務(wù)具有延遲低的特點器予,適合增量數(shù)據(jù)的導入,同時還支持多種數(shù)據(jù)傳輸?shù)牟寮杵龋鏻ogstash乾翔、flume、fluentd施戴、sqoop反浓、logservice等。
2.數(shù)據(jù)存儲
數(shù)據(jù)進入maxcompute后赞哗,默認會以結(jié)構(gòu)化的方式存儲雷则,且有自己的數(shù)據(jù)類型,如Bigint, Boolean, Double, Datetime, String, Decimal懈玻;
數(shù)據(jù)上傳后巧婶,以列壓縮的方式存儲到盤古上。這種壓縮方式的好處就是對于文本類型的數(shù)據(jù)涂乌,一般都能取得較好的壓縮比,一般是4:1英岭。
3.多計算模型
??1)SQL
MaxCompute SQL采用標準的SQL語法湾盒,兼容部分Hive語法。在語法上和HQL非常接近诅妹,熟悉SQL或HQL的編程人員都容易上手罚勾;
MaxCompute提供更高效的計算框架支持SQL計算模型,執(zhí)行效率比普通的MapReduce模型更高吭狡;
需要注意的是尖殃,MaxCompute SQL不支持事務(wù)、索引及Update/Delete等操作划煮。
??2)MapReduce
MaxCompute提供的Java MapReduce編程模型送丰;
由于MaxCompute并沒有開放文件接口,用戶只能通過它所提供的Table讀寫數(shù)據(jù)弛秋;
更為重要的是器躏,MaxCompute還提供了基于MapReduce的擴展計算模型俐载, 即MR2。在該模型下登失,一個Map函數(shù)后遏佣,可以接入連續(xù)多個Reduce函數(shù)。
? 3)Graph
對于某些復雜的迭代計算場景揽浙,例如:K-Means状婶,PageRank等,如果仍然使用MapReduce來完成這些計算任務(wù)將是非常耗時的馅巷。MaxCompute提供的Graph模型能夠非常好的完成這一類計算任務(wù)膛虫。
二、飛天系統(tǒng)和Hadoop生態(tài)圈架構(gòu)對比
vs
三令杈、MaxCompute優(yōu)化原則
1.選表原則
選擇滿足需求的小表走敌,比如匯總表。維表盡量選擇全量表逗噩,事實表盡量選擇增量表掉丽;
選擇產(chǎn)出早的表;
選擇可回滾的表异雁,比如使用加購事件表代替加購全流程表捶障;
依賴的N個上游表,盡量保證上游產(chǎn)出時間要均勻纲刀,如果有差異项炼,考慮換依賴表;
2.小表原則
行數(shù)小于100萬的表認為是小表示绊,這個時候使用mapjoin性能會提高很多锭部;
讀取數(shù)據(jù)的時候要加上分區(qū)等過濾條件,大表變小表面褐。常用過濾條件字段拌禾,做成動態(tài)分區(qū),方便下游過濾展哭;
不得不讀取N天大表的時候湃窍,使用unionall方式合并多天數(shù)據(jù);
3.代碼原則
Join關(guān)聯(lián)要盡可能是主鍵關(guān)聯(lián)匪傍。關(guān)聯(lián)字段類型要一致您市;
多天匯總,先生成1天輕度匯總表役衡,多天使用1天數(shù)據(jù)再匯總茵休;
multiinsert,實現(xiàn)一次讀取多次寫入;
使用系統(tǒng)UDF代替自己的寫的UDF泽篮;
4.調(diào)度原則
依賴max_pt的盗尸,要排除當天依賴;
上游是小時任務(wù)帽撑,使用max_pt要慎重泼各;
執(zhí)行超過1個小時任務(wù)要關(guān)注;
四亏拉、MaxCompute應(yīng)用限制
1.SQL限制
多路輸出限制:單個SQL里最多可以寫128路輸出扣蜻,超過128路報語法錯誤;
動態(tài)輸出分區(qū)限制:任意動態(tài)分區(qū)SQL不允許生成超過2000個動態(tài)分區(qū)及塘,否則引發(fā)運行時異常莽使;
Select屏顯限制:Select屏顯結(jié)果最多只有10000條輸出;
Order by語句后必須接Limit笙僚;
Sort By必須與Distribute By配合使用芳肌;
最多允許128路union all,超過此限制報語法錯誤肋层;
MaxCompute 的JOIN支持多路間接亿笤,但不支持笛卡爾積,即無on條件的鏈接栋猖;
MaxCompute中的Join連接條件净薛,只允許and連接的等值條件,并且最多支持16路join操作蒲拉。只有在MAPJOIN中肃拜,可以使用不等值連接或者使用or連接多個條件;
目前MaxCompute 在mapjoin中最多支持指定6張小表雌团,否則報語法錯誤燃领;
如果使用mapjoin,則所有小表占用的內(nèi)存總和不得超過512MB锦援。請注意由于MaxCompute 是壓縮存儲柿菩,因此小表在被加載到內(nèi)存后,數(shù)據(jù)大小會急劇膨脹雨涛。此處的512MB限制是加載到內(nèi)存后的空間大小懦胞;
多個表join時替久,最左邊的兩個表不能同時是mapjoin的表;
2.MapReduce限制
單個任務(wù)引用的資源數(shù)量不超過512個躏尉,分區(qū)表按照一個單位計算蚯根。
單個任務(wù)引用的資源總計字節(jié)數(shù)大小不超過64MB。
單個任務(wù)的輸入路數(shù)不能超過128,單個任務(wù)的輸出路數(shù)不能超過128路颅拦。
單個任務(wù)中自定義Counter的數(shù)量不能超過64蒂誉。
單個Map或Reduce Worker占用memory默認為2048MB,范圍[256MB, 12GB]距帅。
單個Map或Reduce Worker重復讀一個資源次數(shù)限制 <=64次右锨。
本地運行模式下,Map Worker個數(shù)不能超過100碌秸;Reduce Worker個數(shù)不能超過100绍移;默認一路輸入下載記錄數(shù)100。
以上
ps:這篇文章是基于我從工作中由hadoop切換到maxcompute時讥电,搜集整理的一些內(nèi)容蹂窖,希望能幫助到需要的同學。如果覺得不錯恩敌,歡迎收藏分享~
還有其他感興趣的文章可以進入公眾號主頁瞬测,點擊【菜單】即可: