不能在mapreduce程序中定义Map器的数量,因为将根据输入分割或大小选择总Map器。但是,为什么我们可以在sqoop上设置num mappers呢?当一个mapreduce程序自己获取数字或Map器,并且不让我们选择它时,为什么允许sqoop这样做?
whlutmcx1#
sqoop将使用 --split-by 列。阅读这里的工作原理。还可以在详细模式下运行sqoop,以便更好地理解它的工作原理。它将得到分割列的最小值和最大值,并在num mappers部分上分割整个范围,假设分割列是均匀分布的。如果数据分布不均匀,sqoop将在Map器之间不均匀地分割数据集(带有倾斜)。Map器的数量也是可配置的,至少在Hive中是这样。例如,如果您使用的是tez,则可以配置最小和最大分组拆分大小:
--split-by
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器数量的信息
1条答案
按热度按时间whlutmcx1#
sqoop将使用
--split-by
列。阅读这里的工作原理。还可以在详细模式下运行sqoop,以便更好地理解它的工作原理。它将得到分割列的最小值和最大值,并在num mappers部分上分割整个范围,假设分割列是均匀分布的。如果数据分布不均匀,sqoop将在Map器之间不均匀地分割数据集(带有倾斜)。Map器的数量也是可配置的,至少在Hive中是这样。例如,如果您使用的是tez,则可以配置最小和最大分组拆分大小:
此外,您还可以配置拆分编号,如果可能,tez将开始接近Map器的数量(有些拆分可以合并,有些无法拆分,但会影响Map器的数量):
不建议使用此方法,最好使用上面的拆分大小设置。
对于mr执行引擎:
控制Map绘制者的数量并不容易,因为这取决于许多因素。例如,orc在条带级别上被拆分,这意味着您不能拆分小于单个条带,等等。阅读更多有关Map器数量的信息