什么决定了给定指定数据集时使用的映射器/缩减器的数量

时间:2012-10-17 10:15:24

标签: java hadoop mapreduce

决定用于给定数据集的映射器和缩减器数量以实现最佳性能的因素有哪些?我正在谈论Apache Hadoop Map Reduce平台。

2 个答案:

答案 0 :(得分:3)

根据Cloudera blog

  
    

您是否设置了最佳的映射器和缩减器数量?
    默认情况下,映射器的数量设置为每个HDFS块一个。这通常是一个很好的默认值,但请参见提示2     减速器的数量最好设置为群集中的减少槽数(减去一些以允许故障)。这允许减速器以单波完成。

  

答案 1 :(得分:2)

主要是,映射器的数量取决于InputSplit方法生成的InputFormat#getInputSplits的数量。特别是FileInputSplit根据块和文件拆分输入目录。 Gzipped文件不会拆分,整个输入文件传递给1个映射器。

Two files:
f1 [ block1, block2], 
f2 [block3, block4] 
becomes 4 mappers 
f1(offset of block1), 
f1(offset of block2), 
f2(offest of block3),
f2(offset of block4)

其他InputFormat有自己的文件分割方法(例如Hbase在区域边界上分割输入)。

除了使用CombineFileInputFormat之外,无法有效控制Mappers。但是大多数映射器应该在数据所在的主机上执行。

用户指定的大多数情况下的减少次数。它主要取决于需要在减速器中完成的工作量。但是它们的数量不应该很大,因为Mapper使用算法在Reducer之间分配数据。 一些框架,比如Hive,可以使用每个减速器的经验1GB输出来计算减速器的数量。

一般经验法则:每个reducer使用1GB,但不超过群集容量的0.8-1.2。