hadoop-将reducer number设置为0,但写入同一个文件?

fjaof16o  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(440)

我的工作是计算密集型的,所以我实际上只使用hadoop的分布函数,我希望所有的输出都在一个文件中,所以我将reducer的数量设置为1。我的减速机实际上什么也没做。。。
通过显式地将reducer的数量设置为0,我可以知道如何在Map器中控制以强制将所有输出写入同一个1输出文件吗?谢谢。

wsewodh2

wsewodh21#

在hadoop中不能这样做。你的Map绘制者每个人都要写独立的文件。这使它们高效(无争用或网络传输)。如果你想合并所有这些文件,你需要一个单一的缩减器。或者,您可以让它们成为单独的文件,并在下载时合并这些文件(例如,使用hdfs的命令行) cat 或者 getmerge 选项)。
编辑:从你的评论中,我看到你想要的是摆脱写减速机的麻烦。这绝对是可能的。为此,您可以使用 IdentityReducer . 您可以在这里查看它的api,以及0减速机与使用 IdentityReducer 在这里可以买到。
最后,当我说让多个Map器生成一个输出是不可能的时候,我的意思是在hdfs中使用普通文件是不可能的。您可以对其他类型的输出执行此操作,例如让所有Map器写入单个数据库。如果Map器没有生成太多输出,那么这是可以的。关于如何工作的细节可以在这里找到。

kcugc4gi

kcugc4gi2#

cabad 在很大程度上是正确的。但是,如果要使用单个 Mapper 对于单个输出文件,可以使用 FileInputFormat 将文件标记为不可拆分的。同时将减速器的数量设置为0。这会降低使用多个数据节点的性能,但会跳过洗牌和排序。

相关问题