将为 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 中的分区表创建多少个映射器和化简器的主要内容,如果未能解决你的问题,请参考以下文章