阿里云的MaxCompute有哪些使用限制?
我來(lái)答

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

楚玲玉 2021-09-06 提問(wèn)
712

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

關(guān)閉
提交回答
1 個(gè)回答
我來(lái)答
李翔鶴

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

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

  • Tunnel Upload命令上傳限制

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

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

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

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

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

    • 當(dāng)遇到并發(fā)寫(xiě)入時(shí),MaxCompute會(huì)根據(jù)ACID進(jìn)行并發(fā)寫(xiě)的保障。關(guān)于ACID的具體語(yǔ)義,請(qǐng)參見(jiàn)ACID語(yǔ)義。

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

    • 每個(gè)字段的大小不能超過(guò)這個(gè)字段本身的限制,詳情請(qǐng)參見(jiàn)數(shù)據(jù)類(lèi)型版本說(shuō)明。

      說(shuō)明 STRING的長(zhǎng)度不能超過(guò)8 MB。

    • 上傳的過(guò)程中,會(huì)將多條數(shù)據(jù)打包成一個(gè)Package來(lái)進(jìn)行上傳。

  • TableTunnel SDK接口限制

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

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

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

SQL限制

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


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

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


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

Local Debug模式下:

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

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

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

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

PyODPS限制

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

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

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

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

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

    • DataFrame的plot函數(shù)。

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

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

  • 由于兼容性原因,在DataWorks中,options.tunnel.use_instance_tunnel默認(rèn)設(shè)置為False。如果需要全局開(kāi)啟instance tunnel,需要手動(dòng)將該值設(shè)置為T(mén)rue。

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

Graph限制

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

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

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

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

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

  • 單個(gè)Job中自定義Counter的數(shù)量不能超過(guò)64個(gè)。Counter的group name和counter name中不能帶有井號(hào)(#),兩者長(zhǎng)度和不能超過(guò)100。

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

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

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

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

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

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

回答于 2021-09-06
贊同
評(píng)論
掃碼關(guān)注
獲取更多出海問(wèn)答的相關(guān)信息
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家