1

我有一份工作,它使用了 100 个使用 setOutputFormat (SequenceFileOutputFormat.class) 配置的减速器;

作业运行后,我可以通过以下命令组合所有零件文件并让压缩正常工作吗?

hadoop fs -cat output/part* > fullOutput

如果不是,那么使用多个减速器但将它们的所有输出集中到一个文件中的首选方法是什么?

非常感谢,

- 艺术

4

1 回答 1

0

你用的是什么压缩?对于某些编解码器,这肯定行不通。例如,Lzop 编解码器在每个文件的开头都有标头,因此如果您只是连接文件,它们将有散布在其中的标头。Lzo(没有尾随'p')编解码器不包括标题 - 直到你的问题我不明白它为什么存在。我认为这些部分很有可能会连接在一起。

  1. 如果您能够在单个减速器中处理您的工作,那么您可以这样做。或者您可以使用更少的 reducer 运行它,而不必担心合并文件,因为您可以使用该目录作为下一个作业的输入。

  2. 您可以运行后续 MR 作业(IdentityMapper、IdentityReducer),该作业使用单个 reducer 组合您的输出文件。

  3. 您可以解压缩然后重新压缩。

    hadoop dfs -cat output/* | lzop -d -c > full

我曾经有点担心这个。现在我使用更少的 reducer 并避免压缩更小的临时文件。

于 2011-09-14T22:19:25.000 回答