1. 程式人生 > >Hadoop 之 HDFS原理

Hadoop 之 HDFS原理

HDFS原理概述

  1. HDFS叢集分為兩大角色:NameNode、DataNode  (Secondary Namenode)
  2. NameNode負責管理整個檔案系統的元資料
  3. DataNode 負責管理使用者的檔案資料塊
  4. 檔案會按照固定的大小(blocksize)切成若干塊後分布式儲存在若干臺datanode上
  5. 每一個檔案塊可以有多個副本,並存放在不同的datanode上
  6. Datanode會定期向Namenode彙報自身所儲存的檔案block資訊,而namenode則會負責保持檔案的副本數量
  7. HDFS的內部工作機制對客戶端保持透明,客戶端請求訪問HDFS都是通過向namenode申請來進行

HDFS 寫資料流程

  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的伺服器。

HDFS 讀資料流程

  1. 跟namenode通訊查詢元資料,找到檔案塊所在的datanode伺服器
  2. 挑選一臺datanode(就近原則,然後隨機)伺服器,請求建立socket流
  3. datanode開始傳送資料(從磁盤裡面讀取資料放入流,以packet為單位來做校驗)
  4. 客戶端以packet為單位接收,現在本地快取,然後寫入目標檔案