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