發布時間: 2018-01-05 14:54:03
?1.概述:
1.1. HDFS集群分為兩大角色:NameNode、DataNode (Secondary Namenode)
1.2. NameNode負責管理整個文件系統的元數據
1.3. DataNode 負責管理用戶的文件數據塊
1.4. 文件會按照固定的大?。╞locksize)切成若干塊后分布式存儲在若干臺datanode上
1.5. 每一個文件塊可以有多個副本,并存放在不同的datanode上
1.6. Datanode會定期向Namenode匯報自身所保存的文件block信息,而namenode則會負責保持文件的副本數量
1.7. HDFS的內部工作機制對客戶端保持透明,客戶端請求訪問HDFS都是通過向namenode申請來進行
2.HDFS寫數據流程:
2.1:概敘
概述客戶端要向HDFS寫數據,首先要跟namenode通信以確認可以寫文件并獲得接收文件block的datanode,然后,客戶端按順序將文件逐個block傳遞給相應datanode,并由接收到block的datanode負責向其他datanode復制block的副本;
2.2:詳細步驟圖
?
2.3:詳細步驟解析
2.3.1、根namenode通信請求上傳文件,namenode檢查目標文件是否已存在,父目錄是否存在
2.3.2、namenode返回是否可以上傳
2.3.3、client請求第一個 block該傳輸到哪些datanode服務器上
2.3.4、namenode返回3個datanode服務器ABC
2.3.5、client請求3臺dn中的一臺A上傳數據(本質上是一個RPC調用,建立pipeline),A收到請求會繼續調用B,然后B調用C,將真個pipeline建立完成,逐級返回客戶端
2.3.6、client開始往A上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),以packet為單位,A收到一個packet就會傳給B,B傳給C;A每傳一個packet會放入一個應答隊列等待應答
2.3.7、當一個block傳輸完成之后,client再次請求namenode上傳第二個block的服務器。
3.HDFS讀數據流程:
? 3.1:概述 客戶端將要讀取的文件路徑發送給namenode,namenode獲取文件的元信息(主要是block的存放位置信息)返回給客戶端,客戶端根據返回的信息找到相應datanode逐個獲取文件的block并在客戶端本地進行數據追加合并從而獲得整個文件?;
3.2:詳細步驟圖
?
3.3:詳細步驟解析
3.3.1、跟namenode通信查詢元數據,找到文件塊所在的datanode服務器
3.3.2、挑選一臺datanode(就近原則,然后隨機)服務器,請求建立socket流
3.3.3、datanode開始發送數據(從磁盤里面讀取數據放入流,以packet為單位來做校驗)
3.3.4、客戶端以packet為單位接收,現在本地緩存,然后寫入目標文件
上一篇: {大數據}spark入門
下一篇: {大數據}HDFS詳解