如何合并2个bzip2'ed文件?

时间:2010-07-02 18:13:16

标签: compression hadoop bzip2

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

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

4 个答案:

答案 0 :(得分:2)

处理连接的bzip在trunk上修复,或者应该是: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,你应该没问题。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

<div
    style={{
        width: '400px',
        height: '150px',
        border: '3px solid red',
        padding: '5px',
        display: 'flex',
        flexFlow: 'column',
    }}
>
    <div
        style={{
            border: '3px solid lightblue',
        }}
    >
        Table:
    </div>
    <div
        style={{
            border: '3px solid green',
            flex: 1,
            position: 'relative',       // <<< Wil condition child sizing
        }}
    >
        <React15Tabulator
            data={data}
            columns={columns}
            layout={'fitColumns'}
            // options={options}
            index={'index'}
            style={{
                margin: 0,               // remove default margins
                height: '100%',          // size to 100%
                position: 'absolute',    //   of green div's height
            }}
        />
    </div>
</div>

这将合并文件夹$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input foo \ -output foo_merged \ -mapper /bin/cat \ -reducer /bin/cat 中的所有文件,并将单个文件( part-00000 )写入文件夹foo

您可以对输入文件夹使用通配符,也可以根据需要包含要加入的所有文件而使用任意数量的foo_merged

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

-input

替换为您要使用的BZip2Codec。

更多信息here

答案 3 :(得分: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 ' ' '"

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

还要将CombineFileInputFormat类视为InputFormat。