1. 程式人生 > 其它 >HDFS04 HDFS的讀寫流程

HDFS04 HDFS的讀寫流程

HDFS的讀寫流程(面試重點)

HDFS寫資料流程

客服端把D://ss.avi檔案傳送到叢集

1.首先需要建立一個Distributed FileSystem(分散式檔案系統)客服端。向NameNode請求上傳檔案。上傳到/user/atguigu/ss.avi路徑。
2.NameNode 檢查使用者是否有許可權,檢查目標路徑/user/atguigu是否可行,檢測目標檔案ss.avi是否存在。檢查完畢後返回結果,是否可以上傳檔案。
3.客戶端請求第一個 Block 上傳到哪幾個 DataNode 伺服器上。
4.NameNode根據選擇策略返回 DataNode 節點。
5.客戶端建立FSDataOutPutStream,請求 dn1建立Block傳輸通道,dn1 收到請求會繼續傳給dn2,然後 dn2 傳給 dn3,將這個通訊管道建立完成。
6.dn3、dn2、dn1應答客戶端。
7.dn1在磁碟中寫的過程中,同時把資料傳給dn2。以Packet(64k)為單位,dn1收到一個 Packet就會傳給dn2,dn2 傳給 dn3。每個dn都有ACK佇列,應答成功後,快取的資料才會清空,如果失敗,快取資料用於重發。
(8)當一個 Block 傳輸完成之後, 客戶端再次請求 NameNode 上傳第二個 Block。(重複執行 3-7 步)

補充:選擇策略
節點距離最近與負載均衡
4.1優先本地節點
4.2其他機架A一個節點
4.3其他機架A另一個節點

網路拓撲-節點距離計算

在HDFS寫資料的過程中,NameNode會選擇距 離待傳上傳資料最近距離 的DataNode接收。那麼這個最近距離怎麼計算?

節點距離:兩個節點到達最近的共同祖先的距離總和。

例如,假設有資料中心 d1 機架 r1 中的節點 n1。該節點可以表示為/d1/r1/n1。以下給出了四種類型距離描述。

案例

計算節點5與節點9之間的節點距離是多少 -3
計算節點2與節點10之間的節點距離是多少 -3

機架感知(副本儲存節點的選擇)

第一個副本考慮的是節點距離最近,上傳速度最快。
第二個副本保證資料可靠性。
第三個副本兼顧效率與速度。

檢視原始碼
Crtl + n 查詢 BlockPlacementPolicyDefault類,在該類中查詢 chooseTargetInOrder 方法。


HDFS的讀資料流程

把HDFS的資料讀到本地

1.客戶端通過 DistributedFileSystem 向 NameNode 請求下載檔案。
2.NameNode先判斷許可權再通過查詢元資料,找到檔案塊所在的 DataNode 地址,返回目標檔案的元資料。
3.客戶端建立FSDataInputStream流物件,挑選一臺 DataNode伺服器(就近原則與負載能力),請求讀取資料。 假設DN1負載能力到了極限,序列讀,先讀第一塊,再讀第二塊
(3)DataNode 開始傳輸資料給客戶端(從磁盤裡面讀取資料輸入流,以 Packet 為單位來做校驗)。
(4)客戶端以 Packet 為單位接收,先在本地快取,然後寫入目標檔案。