原文:https://www.cnblogs.com/volcao/p/11446657.html
一、HDFS 寫數據流程
-
寫的過程:
- CLIENT(客戶端):用來發起讀寫請求,並拆分文件成多個 Block;
- NAMENODE:全局的協調和把控所有的請求,提供 Block 存放在 DataNode 上的地址;
- DATANODE:負責數據的存儲,可以有很多個;
- 客戶端想 NameNode 發出請求(包含 Blocksize 和 副本數);
- NameNode 經過計算,反饋給客戶端相同副本數的 DataNode,切給出的 DataNode 有優先存儲順序要求;(數據與 DataNode 對應時,一般移動計算,不移動數據)
- 客戶端得到信息后開始寫數據,當第一個 DataNode 接受 Block 時,會將該數據傳給第二個 DataNode ,第二個 DataNode 接受到數據時,也會將該數據傳遞給第三個 DataNode;在最后一個 DataNode 接受數據完畢時,則該 Block 全部傳輸完畢;
- DataNode 在接受數據完畢后,每一個 DataNode 都會將完畢信息傳遞給 NameNode;
- NameNode 將所有 DataNode 反饋的信息(所有數據以傳輸完畢),反饋給客戶端;
- 客戶端接受到 NamaNode 反饋的信息后(第一個 Block 傳輸完畢),開始發送請求傳輸第二個 Block;
- 傳輸完畢后,在關閉請求之前,NameNode 將該文件所有 Block 存放在 DataNode 上的 ID 保存在文件中;
二、HDFS 讀數據的流程
- 客戶端:提供文件名、副本數、Block 數量、Block 地址;
- NameNode:提供 DataNode 地址及內部位置;
- 客戶端提供提供文件名、副本數、Block 數量、Block 地址給 NameNode;
- NameNode 收到請求后,根據請求給出 副本及其 Block 所存放的 DataNode,以及Block 在 DataNode 中存放的位置;
- 客戶端根據 NameNode 給的信息,給 DataNode 發出請求,由 DataNode 給出數據所在的具體塊的信息;
- 客戶端根據 DataNode 提供的信息,下載數據;
-
如果 DataNode 損壞、DataNode 上的數據丟失、數據塊異常或者損壞等異常,HDFS會有相應的故障容錯措施:
三、HDFS 的優缺點總結
-
優點:
- 數據冗余(文件以 Block 並且多副本的方式存儲在集群的節點上)、硬件容錯;
- 處理流式的數據訪問;(一次寫入,多次讀取)
- 適合存儲大文件;(通過擴展 DataNode 來實現存儲大文件)
- 可構建在廉價的機器上;(降低成本)
-
缺點:
- 低延遲的數據訪問;(一般數據較大,不容易實現在秒級別檢索數據)
- 不適合小文件的存儲;(無論文件大小,都有對應的元數據存放在 NameNode 上,如果小文件較多,則對應的元數據較多,對應的元數據所占用的內存信息較大,給NameNode 壓力較大)