HDFS的數據流—HDFS寫數據流程和HDFS讀數據流程

HDFS寫數據流程

一、剖析文件寫入

HDFS寫數據流程,如圖
HDFS寫數據流程

1)客戶端通過Distributed FileSystem模塊向NameNode請求上傳文件,
NameNode檢查目標文件是否已存在,父目錄是否存在。
2)NameNode返回是否可以上傳。
3)客戶端請求第一個 block上傳到哪幾個datanode服務器上。
4)NameNode返回3個datanode節點,分別爲dn1、dn2、dn3。
5)客戶端通過FSDataOutputStream模塊請求dn1上傳數據,dn1收到請求會
繼續調用dn2,然後dn2調用dn3,將這個通信管道建立完成。
6)dn1、dn2、dn3逐級應答客戶端。
7)客戶端開始往dn1上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),
以packet爲單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3;
dn1每傳一個packet會放入一個應答隊列等待應答。
8)當一個block傳輸完成之後,客戶端再次請求NameNode上傳第二個block的
服務器。(重複執行3-7步)。
二、網絡拓撲概念

  在本地網絡中,兩個節點被稱爲“彼此近鄰”是什麼意思?在海量數據處理中,其主要限制因素是節點之間數據的傳輸速率——帶寬很稀缺。這裏的想法是將兩個節點間的帶寬作爲距離的衡量標準。
  節點距離:兩個節點到達最近的共同祖先的距離總和。
網絡拓撲概念
  例如,假設有數據中心d1機架r1中的節點n1。該節點可以表示爲/d1/r1/n1。利用這種標記,這裏給出四種距離描述,如上圖所示。
大家算一算每兩個節點之間的距離,如下圖所示。
網絡拓撲

三、機架感知(副本節點選擇)

1.官方ip地址

http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/RackAwareness.html

http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Data_Replication

2.低版本Hadoop副本節點選擇,如下圖
第一個副本在Client所處的節點上。如果客戶端在集羣外,隨機選一個。
第二個副本和第一個副本位於不相同機架的隨機節點上。
第三個副本和第二個副本位於相同機架,節點隨機。
低版本Hadoop副本節點選擇
3.Hadoop2.7.2副本節點選擇,如下圖
第一個副本在Client所處的節點上。如果客戶端在集羣外,隨機選一個。
第二個副本和第一個副本位於相同機架,隨機節點。
第三個副本位於不同機架,隨機節點。
Hadoop2.7.2副本節點選擇

HDFS讀數據流程

HDFS的讀數據流程,如圖
HDFS讀數據流程
1)客戶端通過Distributed FileSystem向NameNode請求下載文件,NameNode通過查詢元數據,找到文件塊所在的DataNode地址。
2)挑選一臺DataNode(就近原則,然後隨機)服務器,請求讀取數據。
3)DataNode開始傳輸數據給客戶端(從磁盤裏面讀取數據輸入流,以packet爲單位來做校驗)。
4)客戶端以packet爲單位接收,先在本地緩存,然後寫入目標文件。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章