Hadoop_08_客戶端向HDFS讀寫(上傳)數據流程
1.HDFS的工作機制:
- HDFS集群分為兩大角色:NameNode、DataNode (Secondary Namenode)
- NameNode負責管理整個文件系統的元數據
- DataNode 負責管理用戶的文件數據塊(只管接收保存,不負責切片)
- 文件會按照固定的大小(blocksize)128M切成若幹塊後分布式存儲在若幹臺datanode上
- 每一個文件塊可以有多個副本,並存放在不同的datanode上
- Datanode會定期向Namenode匯報自身所保存的文件block信息,而namenode則會負責保持文件的副本數量
- HDFS的內部工作機制對客戶端保持透明,客戶端請求訪問HDFS都是通過向namenode申請來進行
2.HDFS的寫數據流程:
2.1.概述
客戶端要向HDFS寫數據,首先跟Namenode通信以確認可以寫文件並獲得接收文件block的datanode(切塊在客戶端進行),
然後客戶端按順序將文件逐個block傳遞給相應datanode,並由接收到block的datanode負責向其他datanode復制block副本
2.2.詳細步驟流程圖:
步驟詳細說明
1. 跟namenode通信請求上傳文件,namenode檢查目標文件是否已存在,父目錄是否存在
2. namenode返回是否可以上傳
3. client請求第一個 block該傳輸到哪些datanode服務器上
4. namenode返回3個datanode服務器ABC
5. client請求3臺dn中的一臺A上傳數據(本質上是一個RPC調用,建立pipeline),A收到請求會繼續調用B,然後B調用C,
將真個pipeline建立完成,逐級返回客戶端
6. client開始往A上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),以packet為單位,A收到一個packet就會傳
給B,B傳給C;A每傳一個packet會放入一個應答隊列等待應答
7.當一個block傳輸完成之後,client再次請求namenode上傳第二個block的服務器。
3.HDFS的讀數據流程:
客戶端將要讀取的文件路徑發送給namenode,namenode獲取文件的元信息(主要是block的存放位置信息)返回給客戶端,
客戶端根據返回的信息找到相應datanode逐個獲取文件的block並在客戶端本地進行數據追加合並從而獲得整個文件
讀數據流程圖:
4.3.3 詳細步驟解析
1、跟namenode通信查詢元數據,找到文件塊所在的datanode服務器
2、挑選一臺datanode(就近原則,然後隨機)服務器,請求建立socket流
3、datanode開始發送數據(從磁盤裏面讀取數據放入流,以packet為單位來做校驗)
4、客戶端以packet為單位接收,現在本地緩存,然後寫入目標文件
Hadoop_08_客戶端向HDFS讀寫(上傳)數據流程