1

对于 mapreduce 作业,我们需要指定输入数据的分区(map 进程数 - M)和 reduce 进程数(R)。在MapReduce 论文中是他们经常设置的示例:具有 2 000 个工作人员和 M = 200 000,R = 5 000 的集群。工作人员被标记为 map-worker 或 reduce-worker。我想知道集群中的这些工人是如何选择的。

这样做是为了选择固定数量的 map-workers 和固定数量的 reduce-workers?(然后必须将存储在reduce-workers节点中的数据发送到map-reduce worker)或者map阶段在集群中的每个节点上运行,然后选择任何数量的节点作为reduce-workers?还是以其他方式完成?

感谢您的回答。

4

1 回答 1

1

Map-Worker(Mapper)的数量取决于输入文件的Input-splits的数量。

所以例如:200 个输入拆分(它们是逻辑的)=200 映射器

映射器节点是如何选择的?
Mapper 是本地数据节点,如果不可能,则将数据传输到空闲节点并在该节点上调用 Mapper。

Reducer 的数量可以由用户设置(Job.setNumberOfReducer(Number)),否则它也将根据 Mapper 的中间输出的拆分数量。



其他问题的答案

Q1>so in one node can run for example 10 mappers in parallel at one time, or these mappers are processed sequentially?

Ans:顺序(最大(活动/运行)映射器数=DataNodes数)

Q2>how are chosen the nodes where are reducers invoked?

答:

  • 中间键值存储在本地文件系统中而不是在 HDFS 中,然后将其复制(HDFS)到 Reducer Node 。
  • 单个 Mapper 会将 Data 提供给多个 reducer。所以数据的局部性是不可能的,因为特定减速器的数据来自许多节点,如果不是来自所有节点。

所以 Reducer 是(或至少应该)在 Bandwidth of a Node 上选择的,记住以上几点

 Q3>if we need reducers count bigger then overall nodes count (for example 90 reducers in 50 nodes cluster), are the reducers on one node processed in parallel or sequentially?

Ans :顺序(最大数量(活动/运行)Reducer = 数据节点数)

于 2012-10-16T08:56:51.113 回答