将为 hive 中的分区表创建多少个映射器和化简器

Posted

技术标签:

【中文标题】将为 hive 中的分区表创建多少个映射器和化简器【英文标题】:how many mappers and reduces will get created for a partitoned table in hive 【发布时间】:2017-08-08 01:47:59 【问题描述】:

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

【问题讨论】:

【参考方案1】:

映射器:

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

MR 使用 CombineInputFormat,而 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.maxsize=1073741824; -- 1 GB

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

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

mapreduce.job.reduces - 每个作业的默认减少任务数。通常设置为接近可用主机数量的素数。当 mapred.job.tracker 为“本地”时忽略。 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 数量时会以此作为最大reducer 数量。

所以,如果你想增加 reducer 的并行度,增加 hive.exec.reducers.max 并减少 hive.exec.reducers.bytes.per.reducer

【讨论】:

调整 tez 引擎真是太棒了.. 很好的解释 错字? "minsize=1073741824" --> 最大尺寸

以上是关于将为 hive 中的分区表创建多少个映射器和化简器的主要内容,如果未能解决你的问题,请参考以下文章

了解 HIVE 数据库中的映射器和缩减器

为 React 可重用组件设计 Redux 操作和化简器

在 Erlang 中实现 MapReduce 框架

Hadoop的可移植键值数据文件格式?

使用 ChainMapper 的 TotalOrderPartion

文法的二义性和化简