2010-07-02 77 views
0

我想合併2個bzip2的文件。我嘗試追加另一個:cat file1.bzip2 file2.bzip2 > out.bzip2似乎工作(此文件解壓縮正確),但我想使用此文件作爲Hadoop輸入文件,並且我得到關於損壞的塊的錯誤。如何合併2個bzip2的文件?

合併2 bzip2'ed文件而不解壓縮它們的最佳方式是什麼?

回答

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,你應該沒問題。

+0

Bzipped文件被正確分割,但我仍然無法弄清楚如何在連接文件上運行map任務。 (但解壓縮後,然後'cat',然後壓縮這個大輸入文件工作) – wlk 2010-07-08 12:49:25

1

你可以壓縮(好,存儲)他們到一個新的bz2?這意味着你必須做3次解壓才能獲得2個存檔的內容,但可能適用於你的場景。

+0

這是非常好的想法,如果bzip2很聰明,只需要1次解壓就好多了。 – wlk 2010-07-02 21:19:02

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。

+1

我試過了,但是當你有幾千個壓縮文件每個1MB的壓縮文件,並且你不想加載他們到HDFS,但有一個大文件,您可以加載。 – wlk 2013-01-03 08:49:25

+0

'lbzcat部分* | lbzcat -z> output_file' – 2013-01-03 11:53:17

+0

我最近的評論是合併文件,但是hadoop在之後無法讀取它們。 – 2013-01-03 19:23:10