再寫 HDFS Federation機制的時候,發現基礎不扎實,需要將之前的hadoop再詳細記錄一下原理(重點只說Hadoop2.0版本):
Hadoop2.0版本,引入了Yarn。核心:HDFS+Yarn+Mapreduce
Yarn是資源調度框架。能夠細粒度的管理和調度任務。此外,還能夠支持其他的計算框架,比如spark等。

存儲的基礎知識以及原理:
元數據信息和具體數據,分別對應namenode和datenode:
namenode工作職責:
1.要知道管理有哪些機器節點,即有哪些datanode。比如ip信息等。
2.要管理文件信息,文件名、文件多大、文件被切成幾塊、以及每一塊的存貯位置信息(存在哪個datanode節點上了),即管理元數據信息。
3.要有一個機制要知道集群里datanode節點的狀態變化。可以rpc心跳機制來做到。
4.namenode存在單點故障問題,可以再引入一台管理者節點。
5.datanode掛掉后,可能數據就丟失,文件就不完整了,要有一個備份機制,一般來說,一個文件塊,有3個備份,本機一份,同一機架的其他datanode有一份,另外一機器的機器上有一份。
管理元數據信息,文件名,文件大小,文件塊信息等。
namdenode把元數據信息存到內存里,為了快速查詢,此外為了應對服務宕機而引起的元數據丟失,也要持久化到本地文件里。
namdenode不存儲具體塊數據,只存儲元數據信息;datanode用於負責存儲塊數據。
fsimage、edits
fsimage 文件,記錄元數據信息的文件
edits文件,記錄元數據信息改動的文件。只要元數據發生變化,這個edits文件就會有對應記錄。
fsimage和edits文件會定期做合並,這個周期默認是3600s。fsimage根據edits里改動記錄進行元數據更新。
元數據信息如果丟失,HDFS就不能正常工作了。
hadoop namenode -format 這個指令實際的作用時,創建了初始的fsimage文件和edits文件。
namenode對於元數據信息的管理,放在內存一份,供訪問查詢,也會通過fsimage和edits文件,將元數據信息持久化到磁盤上。
Secondarynamenode
負責將fsimage文件定期和edits文件做合並,合並之后,將合並后的元數據文件fsimage傳給namenode。這個SN相當於namenode輔助節點。
Hadoop集群最開始啟動的時候,創建Fsimage和edits文件,這個namenode做的,此外,namenode會做一次文件合並工作,這么做的目的是確保元數據信息是最新的,以為上次停集群的時候,可能還沒來的及做合並。但以后的合並工作,就交給SN去做了。這種SN機制是Hadoop1.0的機制。
結論:Hadoop1.0的SN達不到熱備效果,達不到元數據的實時更新,也就意味着了當namenode掛了的時候,元數據信息可能還會丟失,所以,Hadoop1.0版本的namenode還是單點故障問題。

datanode:
數據節點。用於存儲文件塊。為了防止datanode掛掉造成的數據丟失,對於文件塊要有備份,一個文件塊有三個副本。


參考:https://www.cnblogs.com/tieandxiao/p/8799287.html
