我正在读原始的MapReduce报纸。我的理解是,当使用数百GB的数据时,传输这么多数据的网络带宽可能是MapReduce作业的瓶颈。对于映射任务,我们可以通过将映射任务调度到已经包含任何给定拆分的数据的工作人员上,从而减少网络带宽,因为从本地磁盘读取不需要网络带宽。
然而,洗牌阶段似乎是一个巨大的瓶颈。约简任务可能从所有映射任务接收中间键/值对,并且几乎所有这些中间键/值对都将在网络中流。
当使用数百个GB或更多的数据时,是否需要使用组合器才能获得有效的MapReduce作业?
发布于 2016-07-05 17:29:25
在这种情况下,组合器起着很重要的作用,它的作用就像一个局部约简,所以它不会发送所有的数据,只发送很少的值或局部的聚集值,但是不能在所有的情况下应用组合器。
如果一个约简函数既是可交换的,又是结合的,那么它可以作为一个组合器使用。
就像在中位数的情况下,它是行不通的。
组合器不能在所有的情况下使用。
还有其他参数可以调优如下:
当map发出输出时,它不会直接进入磁盘,而是进入100 MB的循环缓冲区,当填充80%时,会将记录泄漏到磁盘中。
因此,您可以增加缓冲区大小,并增加阈值,在这种情况下,溢出将更少。
如果有那么多溢出,那么溢出将合并成一个单一的文件,我们可以玩溢出因素。
有这样的线程从本地磁盘复制数据到减少jvm的数据,这样就可以增加它们的数量。
压缩可以在中间级和最终级使用。
因此,Combiner并不是唯一的解决方案,也不会在所有情况下使用。
发布于 2016-07-05 23:43:19
让我们说映射器发出(单词,计数)。如果您不使用组合器,那么如果映射器有单词abc 100次,那么减速器必须拉(abc,1) 100次,假设( word,count)的大小是7字节。在没有组合器的情况下,还原器必须拉出7* 100字节的数据,而作为with组合器,还原器只需要提取7字节的数据。此示例仅说明了组合器如何减少网络流量。注:这是一个模糊的例子,只是为了使理解更简单。
https://stackoverflow.com/questions/38208974
复制相似问题