我有很多小文件(大小〜1MB),我需要分發。衆所周知,Hadoop和HDFS更喜歡大文件。但我不知道這是否也可以應用到分佈式緩存,因爲分佈式文件存儲在本地機器上。將小文件合併到Hadoop分佈式緩存的大文件中?
如果需要合併它們,在HDFS上以編程方式合併文件的最佳方式是什麼?
還有一個問題:使用符號鏈接有什麼好處?由於
我有很多小文件(大小〜1MB),我需要分發。衆所周知,Hadoop和HDFS更喜歡大文件。但我不知道這是否也可以應用到分佈式緩存,因爲分佈式文件存儲在本地機器上。將小文件合併到Hadoop分佈式緩存的大文件中?
如果需要合併它們,在HDFS上以編程方式合併文件的最佳方式是什麼?
還有一個問題:使用符號鏈接有什麼好處?由於
您可以創建你的所有小文件的存檔(tar或zip),並把它添加到分佈式緩存如下:
DistributedCache.addCacheArchive(new URI("/myapp/myzip.zip", job);
並獲得文件的映射/減速如下:
public void configure(JobConf job) {
// Get the cached archives/files
File f = new File("./myzip.zip/some/file/in/zip.txt");
}
更多here
下面是Cloudera的一個blog對小文件的問題。
謝謝。我會嘗試。你對性能有什麼想法嗎?它會增加嗎? – v4r 2013-04-06 19:51:43
我沒有對它進行基準測試,但它確實有所提高。 – Amar 2013-04-07 07:39:52