我想合并2个bzip2'ed文件。我尝试将一个附加到另一个:cat file1.bzip2 file2.bzip2 > out.bzip2
这似乎有效(此文件正确解压缩),但我想将此文件用作Hadoop输入文件,并且我收到有关已损坏块的错误。
合并2个bzip2的文件而不解压缩它们的最佳方法是什么?
答案 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。