映射器数量:Mapreduce与Sqoop

问题描述 投票:0回答:1

无法在mapreduce程序上定义映射器的数量,因为将根据输入的分割或大小选择映射器的总数。但是,为什么我们可以选择在sqoop上设置num-mappers?当mapreduce程序自己使用数字或mappers而不让我们选择它时,为什么允许sqoop进行操作?

hive mapreduce hdfs sqoop2
1个回答
0
投票

sqoop将使用--split-by列拆分您的数据集。阅读其工作原理here。假设拆分列均匀分布,它将获得拆分列的最小值和最大值,并在num-mappers部分拆分整个范围。如果分布不均,sqoop将不均匀地在映射器之间划分数据集。

而且至少在蜂巢中,映射器的数量也是可配置的。例如,如果您正在使用Tez,则可以配置最小和最大分组拆分大小:

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

还可以配置拆分号,如果可能,Tez将开始接近它的映射器数(某些拆分可以合并,某些内容不能拆分,但是会影响映射器数):

set tez.grouping.split-count=5000;

不推荐这种方法,最好使用上面的分割尺寸设置。

对于MR执行引擎:

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

控制映射器的数量不是那么容易,因为取决于许多因素。例如,ORC在条带级别分割,这意味着您不能分割得比单个条带小,等等。有关number of mappers的更多信息

© www.soinside.com 2019 - 2024. All rights reserved.