週末花了一天的時間仔細了重溫了一下client對HDFS文件的讀寫過程,總結如下:
每次讀寫都是以一個數據塊的形式來進行的,並且包括數據內容和數據的校驗值。另外,到 namenode 上獲取相應的信息都是用 RPC 來通信的,而到 datanode 獲取真正的數據塊內容是由 Socket 的網絡流來進行的,這是因爲二者的通信數據量還是有些差別的,另外一點是考慮了網絡擁塞問題。
同時客戶端爲了提高效率,一般都是從 datanode 上讀寫一個塊大小的數據內容,然後緩存到本地內存的。另外到 namenode 上讀取數據塊信息也是類似的,一次性讀取了多個數據塊信息,緩存到本地內存,來減少 namenode 的通信擁塞。
另外,對於分佈集羣,要重點考慮以下問題:
數據劃分,負載平衡,通信擁塞,各結點的本地數據管理,資源合理利用,錯誤處理等。
歸根結底就是擴展性,可靠性,高性能。