我的工作是计算密集型的,所以我实际上只使用hadoop的分布函数,我希望所有的输出都在一个文件中,所以我将reducer的数量设置为1。我的减速机实际上什么也没做。。。通过显式地将reducer的数量设置为0,我可以知道如何在Map器中控制以强制将所有输出写入同一个1输出文件吗?谢谢。
wsewodh21#
在hadoop中不能这样做。你的Map绘制者每个人都要写独立的文件。这使它们高效(无争用或网络传输)。如果你想合并所有这些文件,你需要一个单一的缩减器。或者,您可以让它们成为单独的文件,并在下载时合并这些文件(例如,使用hdfs的命令行) cat 或者 getmerge 选项)。编辑:从你的评论中,我看到你想要的是摆脱写减速机的麻烦。这绝对是可能的。为此,您可以使用 IdentityReducer . 您可以在这里查看它的api,以及0减速机与使用 IdentityReducer 在这里可以买到。最后,当我说让多个Map器生成一个输出是不可能的时候,我的意思是在hdfs中使用普通文件是不可能的。您可以对其他类型的输出执行此操作,例如让所有Map器写入单个数据库。如果Map器没有生成太多输出,那么这是可以的。关于如何工作的细节可以在这里找到。
cat
getmerge
IdentityReducer
kcugc4gi2#
cabad 在很大程度上是正确的。但是,如果要使用单个 Mapper 对于单个输出文件,可以使用 FileInputFormat 将文件标记为不可拆分的。同时将减速器的数量设置为0。这会降低使用多个数据节点的性能,但会跳过洗牌和排序。
cabad
Mapper
FileInputFormat
2条答案
按热度按时间wsewodh21#
在hadoop中不能这样做。你的Map绘制者每个人都要写独立的文件。这使它们高效(无争用或网络传输)。如果你想合并所有这些文件,你需要一个单一的缩减器。或者,您可以让它们成为单独的文件,并在下载时合并这些文件(例如,使用hdfs的命令行)
cat
或者getmerge
选项)。编辑:从你的评论中,我看到你想要的是摆脱写减速机的麻烦。这绝对是可能的。为此,您可以使用
IdentityReducer
. 您可以在这里查看它的api,以及0减速机与使用IdentityReducer
在这里可以买到。最后,当我说让多个Map器生成一个输出是不可能的时候,我的意思是在hdfs中使用普通文件是不可能的。您可以对其他类型的输出执行此操作,例如让所有Map器写入单个数据库。如果Map器没有生成太多输出,那么这是可以的。关于如何工作的细节可以在这里找到。
kcugc4gi2#
cabad
在很大程度上是正确的。但是,如果要使用单个Mapper
对于单个输出文件,可以使用FileInputFormat
将文件标记为不可拆分的。同时将减速器的数量设置为0。这会降低使用多个数据节点的性能,但会跳过洗牌和排序。