对于mapreduce作业,我们需要指定输入数据的分区(映射进程的数量 - M)和减少进程的数量(R)。在MapReduce papers中他们经常设置的例子:拥有2 000名工人的集群,M = 200 000,R = 5 000.工人被标记为map-worker或reduce-worker。我想知道如何选择集群中的这些工人。
这样做是为了选择固定数量的地图工作者和固定数量的减少工人吗? (然后存储在reduce-workers节点中的数据必须发送到map-reduce worker) 或者映射阶段在集群中的每个节点上运行,然后选择任何节点数作为reduce-workers? 或者是以另一种方式完成的?
感谢您的回答。
答案 0 :(得分:1)
Map-Worker(Mapper)的数量取决于输入文件的输入分割数。
所以 Ex:200输入分割(它们是合乎逻辑的)= 200 Mapper 。
如何选择Mapper节点?
Mapper是本地数据节点,如果不可能,则将数据传输到空闲节点,并在该节点上调用Mapper
Reducer的数量可以由用户设置( Job.setNumberOfReducer(Number)),否则它也将按照Mapper的Intermediate-output的分割数量。
其他问题的答案
Q1>so in one node can run for example 10 mappers in parallel at one time, or these mappers are processed sequentially?
Ans:顺序(最大(活动/运行)映射器数量=数据节点数量)
Q2>how are chosen the nodes where are reducers invoked?
答:
因此,在节点的带宽上选择(或至少应该)减速器,记住所有以上几点
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:顺序(最大(活动/运行)减速器数=数据节点数)