2015-06-29 13 views
0

我想比較1000個小文件(1-2 MB)的HDFS和本地文件系統的性能。如果不使用序列文件,與本地文件系統相比,HDFS讀取1000個文件的時間幾乎增加一倍。 我聽說過序列文件在這裏 - Small Files Problem in HDFS 我想顯示更好的響應時間爲HDFS檢索這些記錄比本地FS。序列文件會有幫助還是我應該尋找別的東西? (HBase的可能)與本地文件系統相比,將序列文件幫助提高讀取HDFS的性能?

編輯:我使用的Java程序來讀取喜歡這裏HDFS Read though Java

回答

1

是,對於簡單的文件檢索抓住一個序列文件的文件會再抓1000個文件要快得多。從HDFS讀取時,會產生更多開銷,包括啓動JVM(假設您使用的是hadoop fs -get ...),從NameNode獲取每個文件的位置,以及網絡時間(假設您擁有多個數據節點)。

序列文件可以被認爲是一種容器的形式。如果將所有1000個文件放入序列文件中,則只需抓取32個塊(如果塊大小設置爲64MB)而不是1000.這將減少位置查找和整個網絡連接。您在閱讀序列文件時會遇到另一個問題。它是一種二進制格式。

HBase更適合低延遲和隨機讀取,因此它可能是更好的選擇。請記住,磁盤仍然會發生(除非你正在從內存中運行),所以在本地讀取一堆小文件可能是一個更好的解決方案,然後使用HDFS作爲文件存儲。

+0

我不明白。正如你所說的「對於每個地圖任務」,但是這個地圖任務何時發生?如這裏給出的 - hadooptutorials.co.in/tutorials/hadoop/...簡化文件檢索中的角色映射減少是什麼?如果我從存儲所有小文件的單個序列文件中進行並行讀取(使用線程),也可以獲得更好的結果嗎? – arg21

+0

對不起,我誤解了這個問題。我已經適當地更新了答案。 –

+0

感謝您的快速回復。我會先嚐試序列文件解決方案,並希望得到期望的結果。我正在使用分佈式文件系統來提供高可用性和可靠性,因此不使用本地文件系統。 – arg21

相關問題