在我的问题我有100TB的数据进行处理。该数据集中的每个文件大约为1MB,并且可以属于我们定义的超过10,000个不同“组”中的3个。每组文件都需要一起处理,组中可以有几个文件到几百个文件。由于我们有成千上万个这样的组织,我们认为这是MapReduce的一个好选择。MapReduce:Map-only还是Reduce-only?
我看到的东西两种可能的方法来建立这个工作(也许还有更多),Hadoop等:
仅映射的:我们存档按组的文件,因此分裂和随后的映射是在集团层面完成的。由于每个地图作业都有整个组,所以它可以自己完成处理,并且我们不需要减少作业。但是我发现这个解决方案存在一些问题。首先,由于文件最多可以存在3个组,除了Hadoop的复制因素之外,按组归档可能会导致存储开销增加三倍。此外,像这样归档数据会使其在其他处理文件的应用程序中有所不同。
减少,仅:据我了解,这种模式意味着一个简单的“身份”映射和数据密集型减速。在此解决方案中,文件将无序存储在磁盘上,映射程序将收到一组要处理的文件。然后,映射器将文件读入内存(至少是它的头文件信息)以确定它属于哪个组,然后发出(组,文件)对以减少。减速器将负责处理这些组。但是,我担心我们可能会失去数据局部性的好处,或者通过走这条路线而导致数据流量太大而导致网络停滞。
这两种方法都有效吗?如果是这样,哪个会更受欢迎?具体来说,我觉得我很了解Map-only解决方案的优点和缺点,但不是仅限于Reduce。我不确定“数据本地”如何减少工作,或者如果认为在减少任务中执行“繁重工作”是不好的做法。
真棒,这绝对回答了我关于将数据处理卸载到减速器的成本的问题。这听起来像是,一般来说,你想尝试在mappers中完成大部分工作,对吗?确切地说, –
。我总是喜欢在mapper上执行大部分工作,并尽量减少传递给reducers的数据。 –