2014-04-10 59 views
3

我正在嘗試從Hadoop HDFS中檢索總計幾個GB的文本文件的目錄。我可以壓縮文件爲'hadoop hdfs -get'

hadoop hdfs -get /path/to/directory/* . 

這樣做,但我的鏈接到Hadoop集羣約爲1 MB/s,因此這需要相當長一段時間。像大多數文本文件一樣,這些文件壓縮得非常好,所以我希望將它們壓縮下載。 hadoop hdfs -get命令在傳輸過程中是否自動壓縮(http和其他協議可以使用的方式)?

如果不是,那麼使用壓縮來獲取文件的最直接的方法是什麼?如果它很重要,羣集正在運行CDH 4.5.0,並且我沒有羣集上的任何管理員權限。

我找到了this question,但那是在討論壓縮文件以保存在HDFS中,而且似乎應該有一種方法來壓縮傳輸中的字節,而不創建,獲取和刪除壓縮副本。從我對典型Hadoop用法的理解中,似乎獲取和放置非常大的文本文件應該是一個典型的用例,並且已經確定文本文件壓縮良好。

我還會接受一個答案,表明這是一個有記錄的缺失功能,它被有意地排除在Hadoop之外,或者預計將在未來發行版中添加。

回答

0

由於您的帶寬很低,壓縮必須在獲取本地計算機上的文件之前進行。您需要使用LZO或羣集上配置的任何其他壓縮編解碼器運行MapReduce作業。這樣你就可以得到一個壓縮的輸出,然後你可以下載。由於作業將在羣集中運行,並且數據本地化生效的速度會更快。

看看Hadoop HAR,它的確如上所述。它運行MR並創建壓縮的Hadoop存檔。您可以使用-getToLocal命令下載相同的命令並使用WINRAR打開它。欲瞭解更多信息,看看Hadoop Archives

+0

我只是感到驚訝的是,一些壓縮量沒有內置到'hadoop hdfs -get'和'hadoop hdfs -put'命令或一些等價的命令中。很多人不需要上傳/下載GB或TB範圍內的文件? –

+0

MapR發行版內置了壓縮功能,但是我認爲其他發行版或核心hadoop目前都沒有此功能。關於MapR的更多細節http://answers.mapr.com/questions/38/what-c​​ompression-algorithm-does-mapr-use – Sudarshan

1

我相信這個假設是,大多數人已經在HDFS中使用文件級壓縮,所以應用傳輸級壓縮不會帶來任何收益。

您還必須小心,不要使用某些類型的壓縮,因爲那樣您不能輕鬆地將文件拆分爲輸入到map-reduce作業。您想要使用Snappy或LZO,因爲這些是「可拆分」輸入文件,而Gzip不是。

我確定如果您願意爲Hadoop提供補丁,他們會願意接受支持-get(也可能是-put)中的壓縮的更改,並假定它是可選的。

-get的實施可在CopyCommands.java中找到。您可以看到它使用IOUtils.copyBytesFSDataOutputStream上進行復制。您需要在該點進行壓縮,但目前尚未完成。

但是,在HDFS中提供透明壓縮可能會更好,類似於MapR提供的透明壓縮。

+0

看起來其他人已經提出了透明壓縮:https://issues.apache.org/jira/browse/HDFS-2115,但它看起來並不像門票獲得太多活動。 –

+0

對票證採取行動的最簡單方法是提供補丁。 – b4hand

+0

我不需要添加透明壓縮。但我應該可以爲'-get'和'-put'添加可選壓縮,所以我爲該https://issues.apache.org/jira/browse/HDFS-6323添加了一張票 –