好多同学在使用maxcompute时,对产品的应用限制并不了解。这里,我们将给出maxcompute产品的详细应用限制列表。如有遗漏,还请大家补充:
命名规范:<b>原则上</b>,项目(project),表(table),函数(function),资源(resource),分区(partition),列的名称都不能有特殊字符,只能用英文的a-z,a-z及数字和下划线_,且以字母开头,名称的长度不超过128字节。实际情况可能会略有不同,但我们仍然建议您遵循这个原则进行命名。
task并发度控制:通常情况下,maxcompute会在项目级别做task并发度控制,任意项目下,用户在同一时刻最多只能提交1000个task。对于graph及部分mpi类型的pai作业,最大只允许1000个进程的作业。
列限制:表string列内容长度不允许超过8mb;
sql:
多路输出限制:单个sql里最多可以写128路输出,超过128路报语法错误;
动态输出分区限制:任意动态分区sql不允许生成超过2000个动态分区,否则引发运行时异常;
select屏显限制:select屏显结果最多只有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,则所有小表占用的内存总和不得超过512mb。请注意由于maxcompute 是压缩存储,因此小表在被加载到内存后,数据大小会急剧膨胀。此处的512mb限制是加载到内存后的空间大小;
多个表join时,最左边的两个表不能同时是mapjoin的表;
mapreduce限制:
单个任务引用的资源数量不超过512个,分区表按照一个单位计算。
单个任务引用的资源总计字节数大小不超过64mb。
单个任务的输入路数不能超过128,单个任务的输出路数不能超过128路。
单个任务中自定义counter的数量不能超过64。
单个map或reduce worker占用memory默认为2048mb,范围[256mb, 12gb]。
单个map或reduce worker重复读一个资源次数限制 <=64次。
本地运行模式下,map worker个数不能超过100;reduce worker个数不能超过100;默认一路输入下载记录数100。
graph应用限制:
单个job引用的resource数量不超过256个,table、archive按照一个单位计算;
单个job引用的resource总计字节数大小不超过512m;
单个job的输入路数不能超过1024(输入表的个数不能超过64),单个job的输出路数不能超过256;
多路输出中指定的label不能为null或者为空字符串,长度不能超过256,只能包括a-z,a-z,0-9,_,#,.,-等;
单个job中自定义counter的数量不能超过64,counter的group name和counter name中不能带有#,两者长度和不能超过100;
单个job的worker数由框架计算得出,最大为 1000, 超过抛异常;
单个worker占用cpu默认为200,范围[50, 800];
单个worker占用memory默认为4096,范围[256m, 12g];
单个worker重复读一个resource次数限制不大于64次;
split size默认为64m,用户可设置,范围:0 < split_size <= (9223372036854775807 >> 20);
