Hadoop 之 HDFS原理
阿新 • • 發佈:2018-12-31
HDFS原理概述
- HDFS叢集分為兩大角色:NameNode、DataNode (Secondary Namenode)
- NameNode負責管理整個檔案系統的元資料
- DataNode 負責管理使用者的檔案資料塊
- 檔案會按照固定的大小(blocksize)切成若干塊後分布式儲存在若干臺datanode上
- 每一個檔案塊可以有多個副本,並存放在不同的datanode上
- Datanode會定期向Namenode彙報自身所儲存的檔案block資訊,而namenode則會負責保持檔案的副本數量
- HDFS的內部工作機制對客戶端保持透明,客戶端請求訪問HDFS都是通過向namenode申請來進行
HDFS 寫資料流程
- 根namenode通訊請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在
- namenode返回是否可以上傳
- client請求第一個 block該傳輸到哪些datanode伺服器上
- namenode返回3個datanode伺服器ABC
- client請求3臺dn中的一臺A上傳資料(本質上是一個RPC呼叫,建立pipeline),A收到請求會繼續呼叫B,然後B呼叫C,將真個pipeline建立完成,逐級返回客戶端
- client開始往A上傳第一個block(先從磁碟讀取資料放到一個本地記憶體快取),以packet為單位,A收到一個packet就會傳給B,B傳給C;A每傳一個packet會放入一個應答佇列等待應答
- 當一個block傳輸完成之後,client再次請求namenode上傳第二個block的伺服器。
HDFS 讀資料流程
- 跟namenode通訊查詢元資料,找到檔案塊所在的datanode伺服器
- 挑選一臺datanode(就近原則,然後隨機)伺服器,請求建立socket流
- datanode開始傳送資料(從磁盤裡面讀取資料放入流,以packet為單位來做校驗)
- 客戶端以packet為單位接收,現在本地快取,然後寫入目標檔案