将为hive中的partitoned表创建多少映射器和reduce

时间:2017-03-16 18:03:43

标签: hadoop mapreduce hive

我总是对在hive中为特定任务创建多少映射器和减少而感到困惑。 例如,如果块大小= 128mb并且有365个文件,则每个文件映射到一年中的日期(文件大小=每个1 MB)。有基于日期列的分区。在这种情况下,在加载数据期间将运行多少个映射器和缩减器?

1 个答案:

答案 0 :(得分:2)

<强>映射器:

映射器的数量取决于各种因素,例如数据如何在节点之间分配,输入格式,执行引擎和配置参数。另见:https://cwiki.apache.org/confluence/display/TEZ/How+initial+task+parallelism+works

MR使用CombineInputFormat,而Tez使用分组分割。

TEZ:

set tez.grouping.min-size=16777216; -- 16 MB min split
set tez.grouping.max-size=1073741824; -- 1 GB max split

的MapReduce:

set mapreduce.input.fileinputformat.split.minsize=16777216; -- 16 MB
set mapreduce.input.fileinputformat.split.minsize=1073741824; -- 1 GB

Mappers也在数据所在的数据节点上运行,这就是为什么手动控制映射器数量并不是一件容易的事情,并不总是可以组合输入。

<强>减速: 控制减速器的数量要容易得多。 根据

确定的减速器数量

mapreduce.job.reduces - 每个作业的默认减少任务数。通常设置为接近可用主机数的素数。当mapred.job.tracker是&#34; local&#34;时忽略。 Hadoop默认将此值设置为1,而Hive使用-1作为其默认值。通过将此属性设置为-1,Hive将自动确定减少器的数量。

hive.exec.reducers.bytes.per.reducer - Hive 0.14.0及更早版本的默认值为1 GB。

另外hive.exec.reducers.max - 将使用的最大减速器数。如果mapreduce.job.reduces为负数,Hive会在自动确定减速器数量时将其用作减速器的最大数量。

因此,如果您想增加Reducer并行度,请增加hive.exec.reducers.max并减少hive.exec.reducers.bytes.per.reducer