在使用MaxCompute前,建议您先了解产品相关使用限制,确保业务可顺利开展。本文为您介绍使用MaxCompute过程中的操作限制。

数据传输服务(上传/下载)限制

在MaxCompute中上传下载数据时的使用限制如下:

  • 批量数据通道使用限制说明
    • 批量数据上传
      • UploadSession生命周期:24小时。
      • 单UploadSession写入Block个数:20000个。
      • 单Block写入速度:10 MB/s。
      • 单Block写入数据量:100 GB。
      • 单表创建UploadSession数:每5分钟500个。
      • 单表写入Block数:每5分钟500个。
      • 单表并发提交UploadSession数:32个。
      • 并发写入Block数:受数据传输服务并发(Slot)数限制,单次Block写入占用一个数据传输服务并发(Slot)。
    • 批量数据下载
      • DownloadSession生命周期:24小时。
      • InstanceDownloadSession生命周期:24小时,受实例生命周期限制。
      • 单Project创建InstanceDownloadSession数:每5分钟200个。
      • 单表创建DownloadSession数:每5分钟200个。
      • 单次下载请求速度:10MB/s。
      • 并发创建DownloadSession数:受数据传输服务并发(Slot)数限制,单次创建DownloadSession占用一个数据传输服务并发(Slot)。
      • 并发创建InstanceDownloadSession数:受数据传输服务并发(Slot)数限制,单次创建InstanceDownloadSession占用一个数据传输服务并发(Slot)数。
      • 并发下载请求数:受数据传输服务并发(Slot)数限制,单次数据下载请求占用一个数据传输并发(Slot)。
  • 流式数据通道使用限制说明
    • 单Slot写入速度:1MB/s。
    • 单Slot写入请求数:每秒10个。
    • 单表并发写入分区数:64个。
    • 单分区最大可用Slot数:32个。
    • StreamUploadSession占用Slot数:受数据传输服务并发(Slot)数限制,创建StreamUploadSession时指定数据传输服务并发(Slot)数。
  • DataHub上传数据限制
    • 每个字段的大小不能超过这个字段本身的限制,详情请参见数据类型版本说明
      说明 STRING的长度不能超过8 MB。
    • 上传的过程中会将多条数据打包成一个Package进行上传。

更多数据上传下载信息,请参见数据上传下载

数据传输服务资源免费额度限制说明

下表数据为不同区域下免费共享资源(单位:Slot)Project级最多可用数据传输服务并发(Slot)数说明。
国家或地区区域(Region)数据传输服务并发(Slot)数
中国地区华东1(杭州)300
华东2(上海)600
华东2金融云(上海)50
华北2(北京)300
华北2政务云(北京)100
华北3(张家口)300
华南1(深圳)150
华南1金融云(深圳)50
西南1(成都)150
中国(香港)50
其他国家或地区新加坡100
澳大利亚(悉尼)50
马来西亚(吉隆坡)50
印度尼西亚(雅加达)50
日本(东京)50
德国(法兰克福)50
美国(硅谷)100
美国(弗吉尼亚)50
英国(伦敦)50
印度(孟买)50
阿联酋(迪拜)50

SQL限制

在MaxCompute中开发SQL作业时的使用限制如下。

限制项最大值/限制条件分类说明
表名长度128字节长度限制表名、列名中不能有特殊字符,以字母开头,且只能用英文小写字母(a-z)、英文大写字母(A-Z)、数字和下划线(_)。
注释长度1024字节长度限制长度不超过1024字节的有效字符串。
表的列定义1200个数量限制单表的列定义个数最多为1200个。
单表分区数60000个数量限制单表的分区个数最多为60000个。
表的分区层级6级数量限制在表中创建的分区层次不能超过6级。
屏显10000行数量限制SELECT语句屏显最多输出10000行。
INSERT目标个数256个数量限制MULTI-INSERT场景,目标表的数量限制为256个。
UNION ALL256个数量限制UNION ALL场景,最多允许合并256个表。
MAPJOIN128个数量限制MAPJOIN场景,最多允许连接128个小表。
MAPJOIN内存限制512 MB数量限制MAPJOIN场景,所有小表的内存不能超过512 MB。
ptinsubq1000行数量限制子查询中存在分区列时,子查询的返回结果不能超过1000行。
SQL语句长度 2 MB长度限制SQL语句的最大长度为2 MB。包括您使用SDK调用SQL的场景。
WHERE子句条件个数256个数量限制WHERE子句中的条件个数最大为256个。
列记录长度8 MB数量限制表中单个单元的最大长度为8 MB。
IN的参数个数1024数量限制IN的最大参数限制,例如in (1,2,3….,1024)。如果in(…)的参数过多,会影响编译性能。1024为建议值,不是限制值。
jobconf.json1 MB长度限制jobconf.json的大小为1 MB。当表包含的分区数量较多时,大小可能超过jobconf.json,超过1 MB。
视图不可写操作限制视图不支持写入,不支持INSERT操作。
列的数据类型不可修改操作限制不允许修改列的数据类型及列位置。
Java UDF函数不允许为ABSTRACT或者STATIC操作限制Java UDF函数不能为ABSTRACTSTATIC
最多查询分区个数10000个数量限制最多查询分区个数不能超过10000个。
SQL执行计划长度1 MB长度限制MaxCompute SQL生成的执行计划不能超过1 MB,否则会触发FAILED: ODPS-0010000:System internal error - The Size of Plan is too large报错。

更多SQL信息,请参见SQL

MapReduce限制

在MaxCompute中开发MapReduce作业时的使用限制如下。

边界名边界值分类配置项名称默认值是否可配置说明
Instance内存占用[256 MB,12 GB]内存限制odps.stage.mapper(reducer).memodps.stage.mapper(reducer).jvm.mem2048 MB+1024 MB单个Map Instance或Reduce Instance占用Memory,有框架Memory(默认2048 MB)和JVM的Heap Memory(默认1024 MB)两部分。
Resource数量256个数量限制-单个Job引用的Resource数量不超过256个,Table、Archive按照一个单位计算。
输入路数和输出路数1024个和256个数量限制-单个Job的输入路数不能超过1024(同一个表的一个分区算一路输入,总的不同表个数不能超过64个),单个Job的输出路数不能超过256。
Counter数量64个数量限制-单个Job中自定义Counter的数量不能超过64,Counter的Group Name和Counter Name中不能带有井号(#),两者长度和不能超过100。
Map Instance [1,100000]数量限制odps.stage.mapper.num单个Job的Map Instance个数由框架根据Split Size计算得出,如果没有输入表,可以通过odps.stage.mapper.num直接设置,最终个数范围[1,100000]。
Reduce Instance[0,2000]数量限制odps.stage.reducer.num单个Job默认Reduce Instance个数为Map Instance个数的1/4,用户设置作为最终的Reduce Instance个数,范围[0,2000]。可能出现这样的情形:Reduce处理的数据量会比Map大很多倍,导致Reduce阶段比较慢,而Reduce只能最多2000。
重试次数3数量限制-单个Map Instance或Reduce Instance失败重试次数为3,一些不可重试的异常会直接导致作业失败。
Local Debug模式Instance个数不超100数量限制-
Local Debug模式下:
  • 默认Map Instance个数为2,不能超过100。
  • 默认Reduce Instance个数为1,不能超过100。
  • 默认一路输入下载记录数100,不能超过10000。
重复读取Resource次数64次数量限制-单个Map Instance或Reduce Instance重复读一个Resource次数限制<=64次。
Resource字节数2 GB长度限制-单个Job引用的Resource总计字节数大小不超过2 GB。
Split Size大于等于1长度限制odps.stage.mapper.split.size256 MB框架会参考设置的Split Size值来划分Map,决定Map的个数。
STRING列内容长度8 MB长度限制-MaxCompute表STRING列内容长度不允许超出限制。
Worker运行超时时间[1,3600]时间限制odps.function.timeout600Map或者Reduce Worker在无数据读写且没有通过context.progress()主动发送心跳的情况下的超时时间,默认值是600s。
MapReduce引用Table资源支持的字段类型BIGINT、DOUBLE、STRING、DATETIME、BOOLEAN数据类型限制-MapReduce任务引用表资源时,若表字段有其他类型字段执行报错。
MapReduce是否支持读取OSS数据-功能限制-MapReduce不支持读取OSS数据。
MapReduce是否支持MaxCompute 2.0新类型-功能限制-MapReduce不支持MaxCompute 2.0新类型。

更多MapReduce信息,请参见MapReduce

PyODPS限制

在MaxCompute中基于DataWorks开发PyODPS作业时的使用限制如下:

  • PyODPS节点获取本地处理的数据不能超过50 MB,节点运行时占用内存不能超过1 GB,否则节点任务会被系统中止。请避免在PyODPS任务中写额外的Python数据处理代码。
  • 在DataWorks上编写代码并进行调试效率较低,为提升运行效率,建议本地安装IDE进行代码开发。
  • 在DataWorks上使用PyODPS时,为了防止对DataWorks的Gate Way造成压力,对内存和CPU都有限制,该限制由DataWorks统一管理。如果您发现有Got killed报错,即表明内存使用超限,进程被中止。因此,请尽量避免本地的数据操作。通过PyODPS发起的SQL和DataFrame任务(除to_pandas外)不受此限制。
  • 由于缺少matplotlib等包,如下功能可能受限:
    • DataFrame的plot函数。
    • DataFrame自定义函数需要提交到MaxCompute执行。由于Python沙箱限制,第三方库只支持所有的纯粹Python库以及Numpy,因此不能直接使用Pandas。
    • DataWorks中执行的非自定义函数代码可以使用平台预装的Numpy和Pandas。不支持其他带有二进制代码的三方包。
  • 由于兼容性原因,在DataWorks中,options.tunnel.use_instance_tunnel默认设置为False。如果需要全局开启instance tunnel,需要手动将该值设置为True。
  • 由于实现的原因,Python的atexit包不被支持,请使用try-finally结构实现相关功能。

更多PyODPS信息,请参见PyODPS

Graph限制

在MaxCompute中开发Graph作业时的使用限制如下:

  • 单个Job引用的Resource数量不超过256个,Table、Archive按照一个单位计算。
  • 单个Job引用的Resource总计字节数大小不超过512 MB。
  • 单个Job的输入路数不能超过1024(输入表的个数不能超过64)。单个Job的输出路数不能超过256。
  • 多路输出中指定的Label不能为NULL或者空字符串,长度不能超过256个字符串,只能包括A-Z、a-z、0-9、下划线(_)、井号(#)、英文句点(.)和短划线(-)。
  • 单个Job中自定义Counter的数量不能超过64个。Counter的group namecounter name中不能带有井号(#),两者长度和不能超过100。
  • 单个Job的Worker数由框架计算得出,最大为1000个,超过抛异常。
  • 单个Worker占用CPU默认为200个,范围为[50,800]。
  • 单个Worker占用Memory默认为4096 MB,范围为[256 MB,12 GB]。
  • 单个Worker重复读一个Resource次数限制不大于64次。
  • split_size默认为64 MB,您可自行设置,范围为0<split_size≤(9223372036854775807>>20)。
  • MaxCompute Graph程序中的GraphLoader、Vertex、Aggregator等在集群运行时,受到Java沙箱的限制(Graph作业的主程序则不受此限制),具体限制请参见Java沙箱

更多Graph信息,请参见Graph

其他限制

各地域下的单个MaxCompute项目支持同时提交的作业数量限制如下。

地域单个MaxCompute项目作业并发上限
华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳)、西南1(成都)2500
中国香港、新加坡、澳大利亚(悉尼)、马来西亚(吉隆坡)、印度尼西亚(雅加达)、日本(东京)、德国(法兰克福)、美国(硅谷)、美国(弗吉尼亚)、英国(伦敦)、印度(孟买)、阿联酋(迪拜)300

如果MaxCompute项目提交的作业已经达到上限,继续提交作业会返回报错。错误信息示例:com.aliyun.odps.OdpsException: Request rejected by flow control. You have exceeded the limit for the number of tasks you can run concurrently in this project. Please try later