1、Hadoop Distributed File System整體架構(gòu)
1)主從架構(gòu)宏浩,單個namenode,多個datanode;
2)原始數(shù)據(jù)都被分成固定大邪愣伞(最后一個block除外)的block存儲在各個DataNode上,namenode只負責(zé)存儲metadata:文件名惶凝、副本數(shù)辩蛋、存儲在哪個DataNode等等信息技健,整個分布式文件系統(tǒng)的所有metadata組成存儲在namenode上的namespace骄呼,namespace和大多數(shù)文件系統(tǒng)類似,提供新建琼富、刪除仪吧、移動、重命名等操作鞠眉,namespace是一個樹形結(jié)構(gòu)薯鼠;
3)client讀獲取取數(shù)據(jù),都是先從namenode獲取metadata械蹋,然后到對應(yīng)的DataNode獲取需要的數(shù)據(jù)出皇,目的是給namenode降壓,否則如果都從namenode來獲取原始數(shù)據(jù)的話朝蜘,namenode就會成為最大的瓶頸恶迈。
2涩金、namenode啟動過程
hdfs存儲metadata涉及兩個文件:FsImage和EditLog
FsImage存儲著整個文件系統(tǒng)的namespace谱醇,每個EditLog則記錄著每個block的每一次變更。
FsImage的生成:通過bin/hdfs namenode -format對namenode進行格式化的時候步做,會在namenode所在節(jié)點本地生成FsImage文件副渴。
當(dāng)通過sbin/start-dfs.sh第一次啟動文件系統(tǒng)的時候,系統(tǒng)會把FsImage讀取到內(nèi)存中全度,而DataNode節(jié)點數(shù)據(jù)的相關(guān)變動煮剧,則保留在一系列的EditLog文件中,在下次(非第一次)文件系統(tǒng)重新啟動的時候将鸵,系統(tǒng)是先把目前的FsImage和所有的EditLog進行合并重新生成一個新的FsImage勉盅,然后讀取這個新的FsImage到內(nèi)存中,這樣做是因為讀取FsImage的速率比讀取大量EditLog要快捷的多顶掉。
secondaryNameNode作用:在非第一次啟動namenode的時候草娜,要對FsImage和EditLog進行合并處理,這個時候痒筒,如果上次服務(wù)器運行時間很長的話宰闰,那EditLog的數(shù)量將會非常大,這樣會導(dǎo)致合并的過程相當(dāng)長簿透,為了避免這個問題移袍,HDFS系統(tǒng)會每隔一段時間(默認1小時,可配置)就對FsImage和EditLog進行合并操作老充,這個工作是由secondaryNameNode來完成的葡盗。