阿里云的MaxCompute有哪些使用限制?
我來答

阿里云的MaxCompute有哪些使用限制?

楚玲玉 2021-09-06 提問
702

有知道的老哥方便回答一下嗎?

關(guān)閉
提交回答
1 個回答
我來答
李翔鶴

數(shù)據(jù)上傳下載限制

在MaxCompute中上傳下載數(shù)據(jù)時的使用限制如下:

  • Tunnel Upload命令上傳限制

    • Tunnel命令不支持上傳下載ARRAY、MAP和STRUCT類型的數(shù)據(jù)。

    • 上傳沒有速度限制,上傳速度的瓶頸為網(wǎng)絡(luò)帶寬以及服務(wù)器性能。

    • 重傳有次數(shù)的限制,當(dāng)重傳次數(shù)超過限制,就會繼續(xù)上傳下一個Block。上傳完成后,可以通過select count(*) from table_name語句,檢查數(shù)據(jù)是否有丟失。

    • 一個項目下Tunnel支持并發(fā)的連接數(shù)默認(rèn)上限為2000個。

    • 每個Tunnel的Session在服務(wù)端的生命周期為24小時,創(chuàng)建后24小時內(nèi)均可使用,也可以跨進(jìn)程/線程共享使用,但是必須保證同一個BlockId沒有重復(fù)使用。

    • 當(dāng)遇到并發(fā)寫入時,MaxCompute會根據(jù)ACID進(jìn)行并發(fā)寫的保障。關(guān)于ACID的具體語義,請參見ACID語義。

  • DataHub上傳數(shù)據(jù)限制

    • 每個字段的大小不能超過這個字段本身的限制,詳情請參見數(shù)據(jù)類型版本說明。

      說明 STRING的長度不能超過8 MB。

    • 上傳的過程中,會將多條數(shù)據(jù)打包成一個Package來進(jìn)行上傳。

  • TableTunnel SDK接口限制

    • BlockId的取值范圍是[0, 20000),單個Block上傳的數(shù)據(jù)限制為100 GB。

    • Session的超時時間為24小時。大批量數(shù)據(jù)傳送導(dǎo)致超過24小時,需要自行拆分成多個Session。

    • RecordWriter對應(yīng)的HTTP Request超時時間為120s。如果120s內(nèi)HTTP連接上沒有數(shù)據(jù)流過,服務(wù)端會主動關(guān)閉連接。

SQL限制

在MaxCompute中開發(fā)SQL作業(yè)時的使用限制如下。


限制項最大值/限制條件分類說明
表名長度128字節(jié)長度限制表名、列名中不能有特殊字符,以字母開頭,且只能用英文小寫字母(a-z)、英文大寫字母(A-Z)、數(shù)字和下劃線(_)。
注釋長度1024字節(jié)長度限制長度不超過1024字節(jié)的有效字符串。
表的列定義1200個數(shù)量限制單表的列定義個數(shù)最多為1200個。
單表分區(qū)數(shù)60000個數(shù)量限制單表的分區(qū)個數(shù)最多為60000個。
表的分區(qū)層級6級數(shù)量限制在表中創(chuàng)建的分區(qū)層次不能超過6級。
屏顯10000行數(shù)量限制SELECT語句屏顯最多輸出10000行。
INSERT目標(biāo)個數(shù)256個數(shù)量限制MULTI-INSERT場景,目標(biāo)表的數(shù)量限制為256個。
UNION ALL256個數(shù)量限制UNION ALL場景,最多允許合并256個表。
MAPJOIN128個數(shù)量限制MAPJOIN場景,最多允許連接128個小表。
MAPJOIN內(nèi)存限制512 MB數(shù)量限制MAPJOIN場景,所有小表的內(nèi)存不能超過512 MB。
ptinsubq1000行數(shù)量限制子查詢中存在分區(qū)列時,子查詢的返回結(jié)果不能超過1000行。
SQL語句長度2 MB長度限制SQL語句的最大長度為2 MB。包括您使用SDK調(diào)用SQL的場景。
WHERE子句條件個數(shù)256個數(shù)量限制WHERE子句中的條件個數(shù)最大為256個。
列記錄長度8 MB數(shù)量限制表中單個單元的最大長度為8 MB。
IN的參數(shù)個數(shù)1024數(shù)量限制IN的最大參數(shù)限制,例如in (1,2,3….,1024)。如果in(…)的參數(shù)過多,會影響編譯性能。1024為建議值,不是限制值。
jobconf.json1 MB長度限制jobconf.json的大小為1 MB。當(dāng)表包含的分區(qū)數(shù)量較多時,大小可能超過jobconf.json,超過1 MB。
視圖不可寫操作限制視圖不支持寫入,不支持INSERT操作。
列的數(shù)據(jù)類型不可修改操作限制不允許修改列的數(shù)據(jù)類型及列位置。
Java UDF函數(shù)不允許為ABSTRACT或者STATIC。操作限制Java UDF函數(shù)不能為ABSTRACT或STATIC。
最多查詢分區(qū)個數(shù)10000個數(shù)量限制最多查詢分區(qū)個數(shù)不能超過10000個。
SQL執(zhí)行計劃長度1 MB長度限制MaxCompute SQL生成的執(zhí)行計劃不能超過1 MB,否則會觸發(fā)FAILED: ODPS-0010000:System internal error - The Size of Plan is too large報錯。
MapReduce限制

在MaxCompute中開發(fā)MapReduce作業(yè)時的使用限制如下。


邊界名邊界值分類配置項名稱默認(rèn)值是否可配置說明
Instance內(nèi)存占用[256 MB,12 GB]內(nèi)存限制odps.stage.mapper(reducer).mem和odps.stage.mapper(reducer).jvm.mem2048 MB+1024 MB單個Map Instance或Reduce Instance占用Memory,有框架Memory(默認(rèn)2048 MB)和JVM的Heap Memory(默認(rèn)1024 MB)兩部分。
Resource數(shù)量256個數(shù)量限制-單個Job引用的Resource數(shù)量不超過256個,Table、Archive按照一個單位計算。
輸入路數(shù)和輸出路數(shù)1024個和256個數(shù)量限制-單個Job的輸入路數(shù)不能超過1024(同一個表的一個分區(qū)算一路輸入,總的不同表個數(shù)不能超過64個),單個Job的輸出路數(shù)不能超過256。
Counter數(shù)量64個數(shù)量限制-單個Job中自定義Counter的數(shù)量不能超過64,Counter的Group Name和Counter Name中不能帶有井號(#),兩者長度和不能超過100。
Map Instance[1,100000]數(shù)量限制odps.stage.mapper.num單個Job的Map Instance個數(shù)由框架根據(jù)Split Size計算得出,如果沒有輸入表,可以通過odps.stage.mapper.num直接設(shè)置,最終個數(shù)范圍[1,100000]。
Reduce Instance[0,2000]數(shù)量限制odps.stage.reducer.num單個Job默認(rèn)Reduce Instance個數(shù)為Map Instance個數(shù)的1/4,用戶設(shè)置作為最終的Reduce Instance個數(shù),范圍[0,2000]??赡艹霈F(xiàn)這樣的情形:Reduce處理的數(shù)據(jù)量會比Map大很多倍,導(dǎo)致Reduce階段比較慢,而Reduce只能最多2000。
重試次數(shù)3數(shù)量限制-單個Map Instance或Reduce Instance失敗重試次數(shù)為3,一些不可重試的異常會直接導(dǎo)致作業(yè)失敗。
Local Debug模式Instance個數(shù)不超100數(shù)量限制-

Local Debug模式下:

  • 默認(rèn)Map Instance個數(shù)為2,不能超過100。

  • 默認(rèn)Reduce Instance個數(shù)為1,不能超過100。

  • 默認(rèn)一路輸入下載記錄數(shù)100,不能超過10000。

重復(fù)讀取Resource次數(shù)64次數(shù)量限制-單個Map Instance或Reduce Instance重復(fù)讀一個Resource次數(shù)限制<=64次。
Resource字節(jié)數(shù)2 GB長度限制-單個Job引用的Resource總計字節(jié)數(shù)大小不超過2 GB。
Split Size大于等于1長度限制odps.stage.mapper.split.size256 MB框架會參考設(shè)置的Split Size值來劃分Map,決定Map的個數(shù)。
STRING列內(nèi)容長度8 MB長度限制-MaxCompute表STRING列內(nèi)容長度不允許超出限制。
Worker運(yùn)行超時時間[1,3600]時間限制odps.function.timeout600Map或者Reduce Worker在無數(shù)據(jù)讀寫且沒有通過context.progress()主動發(fā)送心態(tài)的情況下的超時時間,默認(rèn)值是600s。
MapReduce引用Table資源支持的字段類型BIGINT、DOUBLE、STRING、DATETIME、BOOLEAN數(shù)據(jù)類型限制-MapReduce任務(wù)引用表資源時,若表字段有其他類型字段執(zhí)行報錯。
MapReduce是否支持讀取OSS數(shù)據(jù)-功能限制-MapReduce不支持讀取OSS數(shù)據(jù)。
MapReduce是否支持MaxCompute 2.0新類型-功能限制-MapReduce不支持MaxCompute 2.0新類型。

PyODPS限制

在MaxCompute中基于DataWorks開發(fā)PyODPS作業(yè)時的使用限制如下:

  • PyODPS節(jié)點獲取本地處理的數(shù)據(jù)不能超過50 MB,節(jié)點運(yùn)行時占用內(nèi)存不能超過1 GB,否則節(jié)點任務(wù)會被系統(tǒng)中止。請避免在PyODPS任務(wù)中寫額外的Python數(shù)據(jù)處理代碼。

  • 在DataWorks上編寫代碼并進(jìn)行調(diào)試效率較低,為提升運(yùn)行效率,建議本地安裝IDE進(jìn)行代碼開發(fā)。

  • 在DataWorks上使用PyODPS時,為了防止對DataWorks的Gate Way造成壓力,對內(nèi)存和CPU都有限制,該限制由DataWorks統(tǒng)一管理。如果您發(fā)現(xiàn)有Got killed報錯,即表明內(nèi)存使用超限,進(jìn)程被中止。因此,請盡量避免本地的數(shù)據(jù)操作。通過PyODPS發(fā)起的SQL和DataFrame任務(wù)(除to_pandas外)不受此限制。

  • 由于缺少matplotlib等包,如下功能可能受限:

    • DataFrame的plot函數(shù)。

    • DataFrame自定義函數(shù)需要提交到MaxCompute執(zhí)行。由于Python沙箱限制,第三方庫只支持所有的純粹Python庫以及Numpy,因此不能直接使用Pandas。

    • DataWorks中執(zhí)行的非自定義函數(shù)代碼可以使用平臺預(yù)裝的Numpy和Pandas。不支持其他帶有二進(jìn)制代碼的三方包。

  • 由于兼容性原因,在DataWorks中,options.tunnel.use_instance_tunnel默認(rèn)設(shè)置為False。如果需要全局開啟instance tunnel,需要手動將該值設(shè)置為True。

  • 由于實現(xiàn)的原因,Python的atexit包不被支持,請使用try-finally結(jié)構(gòu)實現(xiàn)相關(guān)功能。

Graph限制

在MaxCompute中開發(fā)Graph作業(yè)時的使用限制如下:

  • 單個Job引用的Resource數(shù)量不超過256個,Table、Archive按照一個單位計算。

  • 單個Job引用的Resource總計字節(jié)數(shù)大小不超過512 MB。

  • 單個Job的輸入路數(shù)不能超過1024(輸入表的個數(shù)不能超過64)。單個Job的輸出路數(shù)不能超過256。

  • 多路輸出中指定的Label不能為NULL或者空字符串,長度不能超過256個字符串,只能包括A-Z、a-z、0-9、下劃線(_)、井號(#)、英文句點(.)和短劃線(-)。

  • 單個Job中自定義Counter的數(shù)量不能超過64個。Counter的group name和counter name中不能帶有井號(#),兩者長度和不能超過100。

  • 單個Job的Worker數(shù)由框架計算得出,最大為1000個,超過拋異常。

  • 單個Worker占用CPU默認(rèn)為200個,范圍為[50,800]。

  • 單個Worker占用Memory默認(rèn)為4096 MB,范圍為[256 MB,12 GB]。

  • 單個Worker重復(fù)讀一個Resource次數(shù)限制不大于64次。

  • split_size默認(rèn)為64 MB,您可自行設(shè)置,范圍為0<split_size≤(9223372036854775807>>20)。

  • MaxCompute Graph程序中的GraphLoader、Vertex、Aggregator等在集群運(yùn)行時,受到Java沙箱的限制(Graph作業(yè)的主程序則不受此限制),具體限制請參見Java沙箱。

回答于 2021-09-06
贊同
評論