【发布时间】:2014-03-10 16:46:16
【问题描述】:
在我的 hadoop 代码中,我有 4 个 reducer,我总是有 4 个输出文件,这很正常,因为每个 reducer 将其结果放在一个文件中。 我的问题是:我怎样才能只有一个输出文件?
问题是我有一个迭代的 mapreduce 作业,它接受一个输入文件,将它分成块并将每个块分配给一个映射器,所以这就是为什么我必须收集所有 reducer 结果并将它们放在一个输出文件中为了以等价的方式将此输出文件分成 4 个部分,然后将每个部分分配给一个映射器,依此类推。
【问题讨论】:
-
我可能错了,但我认为你不能那样做。为什么不只有一个减速器?
-
拥有一个reducer 对我的应用程序不利,因为我想从集群和资源(映射器和reducer)中受益!所以这是不可能的吗?我已经搜索了很长时间,但是如果没有聚合所有输出文件的工作,我不知道如何解决它!
-
也许有一种方法可以从您的源代码中调用
hadoop dfs -getmerge,将输出作为一个文件在本地获取,然后hadoop dfs -copyFromLocal将其放回集群?另一种解决方案可能是在第一次迭代后跳过分成块 -
感谢您的提议,但为什么是本地?据我所知,dfs 对集群中的所有机器进行全局处理,对吗?你的第二个命题呢:跳过分割成块是什么意思?如果我不这样做,那么我可以通过多个映射器处理数据吗?谢谢