0

我想合并 2 个 bzip2 文件。我尝试将一个附加到另一个:cat file1.bzip2 file2.bzip2 > out.bzip2这似乎有效(此文件已正确解压缩),但我想将此文件用作 Hadoop 输入文件,并且我收到有关损坏块的错误。

合并 2 个 bzip2 文件而不解压缩它们的最佳方法是什么?

4

4 回答 4

2

处理连接的 bzip 固定在主干上,或者应该是:https ://issues.apache.org/jira/browse/HADOOP-4012 。有它工作的例子:https://issues.apache.org/jira/browse/MAPREDUCE-477?focusedCommentId=12871993&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_12871993 确保你重新运行最新版本的 Hadoop,你应该没问题。

于 2010-07-08T02:57:40.213 回答
1

您可以将它们都压缩(嗯,存储)到新的 bz2 中吗?这意味着您必须进行 3 次解压缩才能获取 2 个存档的内容,但可能适用于您的场景。

于 2010-07-02T18:19:57.730 回答
1

这个问题已经很老了,但我现在就遇到了,所以,如果其他人搜索这个问题,这就是我发现在不使用本地文件系统的情况下将 HDFS 中的多个 bz2 文件合并为一个。这也可以用于任何文本文件。

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
-input foo \
-output foo_merged \
-mapper /bin/cat \
-reducer /bin/cat 

这将连接文件夹中的所有文件foo并将单个文件 ( part-00000 ) 写入文件夹foo_merged

您可以对输入文件夹使用通配符,也可以使用任意数量的通配符-input来包含所有要连接的文件。

输出文件将被解压缩。如果您希望在 bz2 中也压缩输出,则应指定以下两个选项:

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
-D mapred.output.compress=true \
-D mapred.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec \
-input foo \
-output foo_merged \
-mapper /bin/cat \
-reducer /bin/cat 

更换您想要使用的 BZip2Codec。

更多信息在这里

于 2020-01-13T15:17:58.793 回答
0

您不必合并文件即可将它们用作 Hadoop 输入:

  • 考虑file_name*- 一种模式;
  • file_name_1,file_name_2- 输入列表。

Hadoop 会处理它。

否则,您可以使用 Hadoop 的流来合并它们(通过解压缩)。

您可以按模式生成文件列表,例如:

FILES_LIST="'ls -m template*.bz2'"

INPUT_FILE="'echo $FILES_LIST | tr -d ' ' '"

内部'引号应该不同。您可以$INPUT_FILE通过 CLI 作为变量传递给您的脚本。

还可以将CombineFileInputFormat类视为 InputFormat。

于 2013-01-03T01:26:17.263 回答