3,Hadoop中常用概念的深入理解

HDFS中角色:

NameNode:是Master節點,是大領導。管理數據塊映射;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間;

SecondaryNameNode:是一個小弟,分擔大哥namenode的工作量;是NameNode的冷備份;合併fsimage和fsedits然後再發給namenode。

DataNode:Slave節點,奴隸,幹活的。負責存儲client發來的數據塊block;執行數據塊的讀寫操作。

fsimage:元數據鏡像文件(文件系統的目錄樹。)

edits:元數據的操作日誌(針對文件系統做的修改操作記錄)

namenode內存中存儲的是=fsimage+edits。

SecondaryNameNode負責定時默認1小時,從namenode上,獲取fsimage和edits來進行合併,然後再發送給namenode。減少namenode的工作量。

 

NameNode:

NameNode是基於內存存儲的,不會和磁盤發生交換。存儲的是客戶端上傳文件維度的元數據,文件會由客戶端切成塊給不同的DataNode,DataNode在存儲這個塊的時候會基於這個塊存儲一個元數據信息

Hdfs服務器受NameNode內存大小影響,NameNode內存滿了後,就無法再存入任何東西。

NameNode(NN)的持久化:

NameNode保存的信息包括文件的所屬,權限,文件大小,時間,block塊列表,block塊偏移。但是不會持久化block塊的位置信息(block塊每個副本的位置由DataNode上報)。那麼意味着NameNode重啓的時候能從磁盤讀回那些持久化信息,但是無法讀回block塊的位置信息,沒有位置信息那麼就無法確定從哪裏取回block塊信息,此時NameNode會處於一個不可用的狀態(安全模式),但是等到某一個時間點,DataNode啓動後上報位置信息給NameNode,等上報完的時候集羣才真正可用。

安全模式:

namenode啓動的時候,首先將映像文件(fsimage)載入內存,並執行編輯日誌(edits)中的各項操作。

一旦在內存中成功建立文件系統元數據的映射,則創建一個新的fsimage文件(這個操作不需要SecondaryNameNode)和一個空的編輯日誌。

此刻namenode運行在安全模式。即namenode的文件系統對於客戶端來說是隻讀的。(顯示目錄,顯示文件內容等。寫、刪除、重命名都會失敗)。

在此階段Namenode收集各個datanode的報告,當數據塊達到最小副本數以上時,會被認爲是“安全”的, 在一定比例(可設置)的數據塊被確定爲“安全”後,再過若干時間,安全模式結束

當檢測到副本數不足的數據塊時,該塊會被複制直到達到最小副本數,系統中數據塊的位置並不是由namenode維護的,而是以塊列表形式存儲在datanode中。

fsimage:

NameNode在開機的時候會產生一個fsimage(文件系統快照鏡像)這個恢復的時候無需計算因此速度快,但是會耗費大量的IO對內存某一狀態的快照。基於某一時間點的,由於比較耗費IO因此不可能實時發生。

Edits:記錄metadata的操作日誌(實時發生),記錄的是和NameNode發生增刪改操作的日誌,有一個增刪改的操作就會往文件中添加一條增刪改操作的記錄,這些操作要變成內存狀態是需要cpu去執行的。理論上如果沒有fsimage,僅僅靠edits恢復也是可行的,但是會因爲計算edit log中的記錄而耗費大量時間。

NameNode採用二者結合的方式更高效的更新fsimage。

fsimage產生的時間:

在集羣剛搭建格式化的時候,會產生一個空的fsimage;

當NameNode啓動成功的時候,會將此時內存的狀態往下寫一次fsimage;

在關機之前會將fsimage和edits整合產生一個新的fsimage,這個fsimage的時間點可以說是關機的時間點也可以說是開機的時間點。服務器開機開始運行將實時不會產生fsimage。

SecondaryNameNode的由來:

由於fsimage記錄的是某一個時間點內存的狀態,edits記錄的一段時間內的內存發生變化的過程,如果一臺服務器從開啓一直運行了十年,突然斷電了,那麼此時fsimage記錄的還是十年前的內存狀態,edits文件中記錄的是這十年之間的操作記錄。顯然這樣會導致恢復的過程非常漫長。因此我們可以想象用另一臺服務器在每一段固定的時間點(比如每隔24小時)將fsimage和edits複製到這臺服務器上整合一次,產生一個此時新的時間點的fsimage然後去覆蓋舊的fsimage,那麼此時服務器中的fsimage記錄的將會是最新的內存狀態。即便是突然斷電了,那麼最糟糕的情況是fsimage回到了24小時前的狀態,我們只需要根據這個24小時前的fsimage和這24小時的edits記錄來恢復到目前狀態即可。這臺服務就是SecondaryNameNode。

DataNode(DN)中兩個元數據的概念差異:

DataNode中也有一個元數據,NameNode存儲的是客戶端上傳文件維度的元數據文件會由客戶端切成塊給不同的DataNode,DataNode在存儲這個塊的時候會基於這個塊存儲一個元數據信息。通過向NN發送心跳保持與其聯繫(3秒一次),如果NN 10分鐘沒有收到DN的心跳,則認爲其已經lost,並copy其上的block到其它DN。

DataNode的元數據中有一個非常重要的叫做MD5驗證

保證文件的完成可靠性,這臺服務器存的數據可能因爲磁盤有壞道再讀出數據會錯誤或者數據在傳輸過程中可能出現各種問題, 例如一般大型的視頻,音頻等文件在通過網絡傳輸的時候,一般都會有一個md5的碼值,這個碼值一般是由服務端計算出來的,等文件通過傳輸下載到本地後,拿着MD5軟件再計算出碼值,如果兩個碼值一致,代表文件的任何一個二進制位都沒有被破壞。我們客戶端此時將數據交給了HDFS管理,這些塊通過網絡傳輸傳給DataNode後,DataNode立刻計算出這些塊的md5,後期某個時間點客戶端想下載回這個塊,DataNode將塊傳輸回客戶端,客戶端要先計算下md5與原數據的md5進行對比,如果兩次的md5值一致,則客戶端無需去考慮下載其它副本,再去下載其它塊的內容回客戶端進行拼接。只要每個塊都正確,那麼拼接的內容就是正確的。如果一旦客戶端發現下載回塊的md5碼值變了,這個塊就丟失,再找另外一臺副本的服務器再下載這個塊。

SecondaryNameNode(SNN):

它不是NN的備份(但可以做備份),它的主要工作是幫助NN合併edits log,減少NN啓動時間。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章