内容纲要
概要描述
inceptor sql 提交后的 task 数目会影响性能,本文简单介绍一下决定一个 sql 对应的 task 数目的几个因素;
详细说明
主要分为 map 阶段 和 reduce 阶段来介绍
map 阶段 task 数量
1、text 表
取决于 text 表数据在 hdfs 上的文件数量;当单个文件大于 HDFS 默认配置的 blocksize 为 128M 时会自动切分。
2、分桶不分区
一般,task 数目为分桶数
3、分桶且分区
如果没有分区过滤,则 task 数目为 分区数 桶数
如果有分区过滤,则 task 数目为 过滤后的分区数 桶数
Reduce 阶段 task数目
reduce task 数目是由 map task 数目和 operator 类型决定的。
1、group by
reduce task 数目为 map task 数 * 0.6
2、join 操作
reduce task 数目为 map task 数 * 1
手动控制 task 数目
reduce task 数可以通过下面参数设置:
mapred.reduce.tasks //设置 reduce 个数
mapred.minreduce.tasks //设置最小 reduce个数
另外,主要的 operator 对应的系数是可以调整的,不过不建议随便调整。
注意:对分桶表插入,如果 mapred.reduce.tasks 跟桶数不一致,结果可能有问题,所以分桶表插入时,不要设置 mapred.reduce.tasks。