【发布时间】:2023-04-01 13:47:01
【问题描述】:
我有一份使用 100 个减速器配置的工作 setOutputFormat(SequenceFileOutputFormat.class);
作业运行后,我可以通过以下方式合并所有零件文件吗? 以下命令并使事情正常工作 压缩?
hadoop fs -cat output/part* > fullOutput
如果不是,那么使用多个的首选方法是什么 减速器,然后将所有输出集中到一个文件中?
非常感谢,
--艺术
【问题讨论】:
我有一份使用 100 个减速器配置的工作 setOutputFormat(SequenceFileOutputFormat.class);
作业运行后,我可以通过以下方式合并所有零件文件吗? 以下命令并使事情正常工作 压缩?
hadoop fs -cat output/part* > fullOutput
如果不是,那么使用多个的首选方法是什么 减速器,然后将所有输出集中到一个文件中?
非常感谢,
--艺术
【问题讨论】:
您使用什么压缩方式?对于某些编解码器,这肯定行不通。例如,Lzop 编解码器在每个文件的开头都有标头,因此如果您只是连接文件,它们将有散布在其中的标头。 Lzo(没有尾随'p')编解码器不包括标题 - 直到你的问题我不明白它为什么存在。我认为这些部分很有可能会连接在一起。
如果您能够在单个减速器中处理您的工作,您可以这样做。或者您可以使用更少的 reducer 运行它,而不必担心合并文件,因为您可以将目录用作下一个作业的输入。
您可以运行后续 MR 作业(IdentityMapper、IdentityReducer),使用单个 reducer 组合您的输出文件。
你可以解压然后重新压缩。
hadoop dfs -cat output/* | lzop -d -c > full
我曾经有点担心这个。现在我使用更少的 reducer,并避免压缩较小的临时文件。
【讨论】: