大數據筆記_2

hadoop 的 HDFS(相關介紹) 包含 NameNode 和 DataNode

NameNode相關
1
 NameNode完全基於內存進行存儲,這樣會很快的處理各種請求,那這樣如何保實現持久化呢? 
持久化方案包括:EditLog和內存鏡像 
	EditsLog:記錄增刪改的操作,下次啓動的時候,讀取日誌,重新執行日誌記錄的命令
		 優點:完整性好
		 缺點:加載恢復數據的時候慢
		 適合:體積小,記錄少適合使用
 	鏡像/快照:內存全量數據基於某個時間點做的對磁盤的益寫
 		優點:恢復速度快
 		缺點:完整性不好
 		

2. 
HDFS 結合使用兩種方式(FSImage + 增量EditsLog)
   比如10點開機打一個快照,然後到11點使用editLog記錄,等到了日誌大小超過限制之後,就把這些操作更新到快照裏 邊,這些操作可以再另外電腦上完成(second name node)


3. 
NameNode存儲的數據包括: 文件屬性,每個快再哪個DataNode上。 如果NameNode重啓的時候,只會加載文件屬性,block的信息需要DataNode重新告知(爲了保持數據的一致性)

4.NameNode啓動流程
		1. NameNode首先會加載EditLog和FSImage(第一次搭建的時候會格式化,生成FSImage)
		2.  將EditLog的事物作用到FSImage上
		3. 保存更新了的FsImage,刪除就的EditLog
		4. 此時NameNode是處於安全模式的,不會對數據塊進行操作
		5. 通過心跳獲取DataNode的彙報數據,確認block信息和副本數都正確
		6. 退出安全模式
		7. 確定哪些數據塊的副本數沒有達到指定數目,通知相關DataNode進行復制



5. 寫的流程
		1. 客戶端把文件切成很多的小塊
		2. 客戶端和NameNode交互元數據,告知NameNode需要要寫一個文件
		3. NameNode出發副本放置策略,返回根據距離排序的DataNode列表,比如叫做 A B C 。。
		4. 客戶端會建立pipeline(會跟A建立TCP連接 ,A會跟C建立TCP連接,B會跟C建立TCP連接。。。。)
		5. 客戶端像A傳輸數據,同事 B 和C也都有了這個數據
6. 讀的流程
		1. 客戶端和NameNode聯繫,取回文件的block信息(包括副本)
		2. 客戶端再副本中挑選距離自己最近的去下載
		3. 客戶端也可以根據需要去下載自己感興趣的block
		4. 
DataNode相關:
8. DataNode保存block的的校驗碼和數據,保證block的可靠性
9. 與NameNode保持心跳,彙報block的列表狀態
Block(一個文件的一個快)的副本放置策略
第一個副本放在上傳文件的DataNode上
第二個副本放在與第一個副本不同的機架的節點上(考慮到只有兩個副本的情況)
第三個副本放在與第二個副本相同的節點上(爲了減少網絡傳輸)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章