2011-04-24 114 views
2

像Google文件系統和Hadoop這樣的分佈式文件系統不支持隨機I/O。
(它不能修改以前寫入的文件,只能寫入和添加)爲什麼Hadoop文件系統不支持隨機I/O?

他們爲什麼要設計這樣的文件系統?
設計的重要優勢是什麼?

P.S我知道Hadoop將支持修改所寫入的數據。
但他們說,它的表現會非常不好。爲什麼?

+0

如果您針對某個特定案例進行優化,那麼您希望這個案例速度更快。那些不完整的東西可能會在表演中受到影響。例如,我曾經用Java編寫過一個用RowSet實現的CSV文件。我需要隨機訪問,並且在尋找文件的最後一行時,比只能向前讀取的「BufferedReader」大約慢四倍。 – Joey 2011-04-24 08:02:15

回答

5

Hadoop分發並複製文件。由於文件被複制,所以任何寫入操作都必須在整個網絡中找到每個複製節並更新文件。這將大大增加操作時間。更新文件可以將其壓入塊大小,並要求文件分成2個塊,然後複製第2個塊。我不知道內部結構以及何時/如何拆分塊,但這是一個潛在的複雜因素。

如果作業失敗或已被殺死而已經做了更新並重新運行會怎麼樣?它可以多次更新文件。

不更新分佈式系統中的文件的好處在於,當您更新文件時,您不知道還有誰在使用該文件,您不知道這些文件的存儲位置。有可能的超時(節點與塊是無響應的),所以你可能最終與不匹配的數據(再次,我不知道hadoop的內部和一個節點下來更新可能會被處理,只是我頭腦風暴)

更新HDFS上的文件有很多潛在的問題(上面列出的幾個)。他們都不是無法克服的,但他們需要一個性能打擊來檢查和說明。

由於HDFS的主要目的是存儲用於mapreduce的數據,所以在這個階段行級更新並不那麼重要。

+0

+1不錯的解釋。謝謝。 – Benjamin 2011-04-25 00:51:50

0

我認爲這是因爲數據的塊大小,Hadoop的整體思想是您不移動數據,而是將算法移至數據。

Hadoop設計用於數據的非實時批處理。如果您正在尋找在響應時間方面更像傳統RDBMS的實現方式,並且隨機訪問看看構建在Hadoop之上的HBase

+0

對,MapReduce不需要隨機訪問。它不符合範式。 – 2011-04-24 09:17:58