1

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

4

2 回答 2

4

根据 Cloudera博客

您是否设置了映射器和缩减器的最佳数量?
映射器的数量默认设置为每个 HDFS 块一个。这通常是一个很好的默认值,但请参阅技巧 2。reducer
的数量最好设置为集群中的 reduce 槽数(减去一些以允许失败)。这允许减速器在一个波中完成。

于 2012-10-18T02:08:13.480 回答
2

映射器的数量主要取决于InputFormat#getInputSplits方法生成的InputSplit的数量。特别是 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之外,无法有效控制映射器。但是大多数映射器应该在数据所在的主机上执行。

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

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

于 2012-10-17T10:57:11.193 回答