本文对MapReduce使用限制项进行说明,不遵循使用限制可能导致业务受到影响。

MaxCompute MapReduce限制项汇总,如下表所示。
边界名 边界值 分类 配置项名称 默认值 是否可配置 说明
Instance内存占用 [256 MB,12 GB] 内存限制 odps.stage.mapper(reducer).memodps.stage.mapper(reducer).jvm.mem 2048 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.size 256 MB 框架会参考设置的Split Size值来划分Map,决定Map的个数。
STRING列内容长度 8 MB 长度限制 - MaxCompute表STRING列内容长度不允许超出限制。
Worker运行超时时间 [1,3600] 时间限制 odps.function.timeout 600 Map或者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新类型。