Inceptor sql 的 task 数量

概要描述

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。

阅读剩余
THE END