Compression 如何合并2个bzip2';编辑文件?

Compression 如何合并2个bzip2';编辑文件?,compression,hadoop,bzip2,Compression,Hadoop,Bzip2,我想合并2个bzip2'ed文件。我尝试将一个文件追加到另一个文件中:cat file1.bzip2 file2.bzip2>out.bzip2,它似乎可以工作(此文件已正确解压缩),但我希望将此文件用作Hadoop输入文件,并且我会收到有关损坏块的错误 在不解压缩的情况下合并2个bzip2文件的最佳方法是什么?您可以将它们都压缩(存储)到新的bz2中?这意味着您必须进行3次解压缩才能获得2个归档文件的内容,但可能与您的场景相符。您可以将它们压缩(好的,存储)到新的bz2中吗?这意味着您必须进行

我想合并2个bzip2'ed文件。我尝试将一个文件追加到另一个文件中:
cat file1.bzip2 file2.bzip2>out.bzip2
,它似乎可以工作(此文件已正确解压缩),但我希望将此文件用作Hadoop输入文件,并且我会收到有关损坏块的错误


在不解压缩的情况下合并2个bzip2文件的最佳方法是什么?

您可以将它们都压缩(存储)到新的bz2中?这意味着您必须进行3次解压缩才能获得2个归档文件的内容,但可能与您的场景相符。

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

处理连接的bzip在主干上是固定的,或者应该是:。有一些例子可以说明它的工作原理:确保您运行的是最新版本的Hadoop,并且应该没有问题。

处理连接的bzip在主干上是固定的,或者应该是:。有一些例子可以说明它的工作原理:确保您运行的是最新版本的Hadoop,并且应该没有问题。

您不必合并文件以将其用作Hadoop输入:

  • 考虑
    文件名*
    -一种模式
  • 文件名\u 1、文件名\u 2
    -输入列表
Hadoop会处理好的

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

您可以按以下模式生成文件列表:

文件列表=“'ls-m template*.bz2'”

INPUT_FILE=“'echo$FILES_LIST | tr-d”“”

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


也将类视为输入格式。

< P>不必合并文件作为Hadoop输入使用:

  • 考虑
    文件名*
    -一种模式
  • 文件名\u 1、文件名\u 2
    -输入列表
Hadoop会处理好的

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

您可以按以下模式生成文件列表:

文件列表=“'ls-m template*.bz2'”

INPUT_FILE=“'echo$FILES_LIST | tr-d”“”

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


也将类视为输入格式。

< p>这个问题很老,但我现在就想到了,所以,如果有其他人搜索这个问题,这就是我发现在HDFS中加入多个BZ2文件到使用本地文件系统的一个结果。这也可以用于任何文本文件

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
-input foo \
-output foo_merged \
-mapper /bin/cat \
-reducer /bin/cat 
这将连接文件夹
foo
中的所有文件,并将单个文件(部分-00000)写入文件夹
foo\u 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 
更换BZIP2编解码器,以供您使用


更多信息。

这个问题很老了,但我现在发现了它,因此,如果其他人搜索这个问题,我发现这就是将HDFS中的多个bz2文件连接到一个文件中而不使用本地文件系统的方法。这也可以用于任何文本文件

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
-input foo \
-output foo_merged \
-mapper /bin/cat \
-reducer /bin/cat 
这将连接文件夹
foo
中的所有文件,并将单个文件(部分-00000)写入文件夹
foo\u 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 
更换BZIP2编解码器,以供您使用


更多信息。

这是一个非常好的主意,如果bzip2是智能的,只需要1次解压缩就更好了。这是一个非常好的主意,如果bzip2是智能的,只需要1次解压缩就更好了。BZIPP文件被正确拆分,但我仍然不知道如何在连接的文件上运行映射任务。(但在解压所有文件后,然后压缩这个大的输入文件)Bzipped文件被正确分割,但我仍然不知道如何在连接的文件上运行map任务。(但在解压所有文件后,然后压缩这个大的输入文件)我尝试了,但当你有几千个压缩文件,每个文件都是1MB,而你不想把它们加载到HDFS时,问题就出现了,但是要有一个可以加载的大文件。
lbzcat part*|lbzcat-z>output\u file
我的最后一条评论是合并文件,但是hadoop之后无法完全读取它们。我尝试过,但是当你有数千个压缩文件,每个文件都是1MB,而你不想将它们加载到HDFS时,问题就出现了,但是要有一个可以加载的大文件。
lbzcat part*|lbzcat-z>output\u file
我的最后一条评论确实合并了文件,但是hadoop无法在之后完全读取它们。