Map器的数量:mapreduce与sqoop

ctrmrzij  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(491)

不能在mapreduce程序中定义Map器的数量,因为将根据输入分割或大小选择总Map器。但是,为什么我们可以在sqoop上设置num mappers呢?当一个mapreduce程序自己获取数字或Map器,并且不让我们选择它时,为什么允许sqoop这样做?

whlutmcx

whlutmcx1#

sqoop将使用 --split-by 列。阅读这里的工作原理。还可以在详细模式下运行sqoop,以便更好地理解它的工作原理。它将得到分割列的最小值和最大值,并在num mappers部分上分割整个范围,假设分割列是均匀分布的。如果数据分布不均匀,sqoop将在Map器之间不均匀地分割数据集(带有倾斜)。
Map器的数量也是可配置的,至少在Hive中是这样。例如,如果您使用的是tez,则可以配置最小和最大分组拆分大小:

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

此外,您还可以配置拆分编号,如果可能,tez将开始接近Map器的数量(有些拆分可以合并,有些无法拆分,但会影响Map器的数量):

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

控制Map绘制者的数量并不容易,因为这取决于许多因素。例如,orc在条带级别上被拆分,这意味着您不能拆分小于单个条带,等等。阅读更多有关Map器数量的信息

相关问题