Hadoop元資料儲存 載入 恢復

2021-09-05 08:47:01 字數 2766 閱讀 8404

1. 元資料載入

為了保證互動速度,hdfs檔案系統的metadata是被load到namenode機器的記憶體中的。

並會將記憶體中的這些資料儲存到磁碟進行持久化儲存,但對塊的位置資訊不進行持久化儲存,在datanode向namenode進行註冊時動態載入。

當namenode啟動時,它從硬碟中讀取editlog和fsimage。將所有editlog中的事務作用在記憶體中的fsimage上,以恢復hdfs重啟之前的最終狀態。這個時候系統處於safemode,在等待datanode上報的block資料塊位置資訊達到namenode中所儲存的0.99999的時候才會退出。

將這個新版本的fsimage從記憶體中儲存到本地磁碟上,然後刪除舊的editlog,因為舊的editlog的事務都已經作用在fsimage上了。這個過程稱為乙個檢查點(checkpoint)。

在記憶體中儲存檔案系統中每個檔案和每個資料塊的引用關係(檔案、block、datanode之間的對映資訊)

2. 元資料儲存

如果元資料僅以檔案的形式儲存在namenode本地硬碟行不行呢?

僅僅以檔案的形式來儲存元資料顯然不行,因為無法做到對各種操作的快速響應

把元資料放在記憶體中呢,確實能夠提高系統響應速度,但是一旦斷電就完全丟失了,這肯定也不行

那麼如果把記憶體的資料定期flush到磁碟檔案的方法行不行呢?

一旦斷電,沒來得及的刷到磁碟的記憶體資料肯定也是要丟失的,顯然也不行

那麼在實際環境中,hadoop是怎麼管理元資料的呢?

首先,磁碟確實有塊空間,對元資料進行持久化儲存的,名為fsimage

如果直接讀取磁碟檔案,速度肯定跟不上,記憶體中也要放一些元資料資訊

雖然很容易丟失,但可以提供查詢服務,實際上就是讀寫分離,由讀寫分離就有了資料一致性的問題

因為寫入資料,沒有寫入記憶體中,最新的元資料記錄在哪呢?

實際上是記錄在edits.log中,這個檔案不提供修改,只提供追加,以日誌的形式記錄

比如在上傳乙個檔案時,先對namenode進行詢問,往**寫,namenode一邊分配一邊記錄

將空間分配資訊記錄edits.log,當完成乙個副本的寫入工作後,通知namenode,被認為是寫入成功

這時,將edits.log的資料更新至記憶體,此時,記憶體中的資料是最新的

即使現在斷電,最新的元資料在edits.log也有儲存。

當客戶端執行寫操作時,namenode會先在編輯日誌中寫下記錄,並在記憶體中儲存乙個檔案系統元資料 

元資料會在編輯日誌有所改動後進行更新。記憶體中的元資料用來提供讀資料請求服務

過程分析:

namenode在記憶體中儲存了整個檔案系統的命名空間和檔案塊對映表

客戶端寫入檔案時,namenode首先在edits.log檔案中記錄元資料操作

操作完成後將成功資訊傳送給namenode。namenode在記憶體中寫入這次操作新產生的元資料資訊

更新的順序edits.log-----記憶體-----fsimage

fsimage合併操作:

為防止影響響應速度,由secondarynamenode來合併

當edits*.log大小達到64m或時間達到1h時,通知secondarynamenode進行checkpoint操作

3. 元資料恢復

恢復資料兩種方式:

第一種:把namesecondary/current中的內容直接複製到name目錄下。 

第二種:通過secondarynamenode來使用import checkpoint。如果開通了這個選項進行namenode恢復的話,系統會將secondarynamenode作為當前的namenode。也會把snn中的元資料資訊作為系統的元資料資訊。

第一種:

在hadoopdata/dfs目錄下可以看到name資料夾和namesecondary資料夾。

進入namesecondary/current資料夾,可以看到edits,fsimage,version,和namenode中的內容相同。

第二種:import checkpoint

如果namenode宕機,硬碟資料需要時間恢復或者不能恢復了。這個時候就可以import checkpoint。

步驟如下:

1.準備與原namenode一樣的機器,包括配置和檔案。

2.建立乙個空的資料夾,為配置檔案中dfs.name.dir所指向的資料夾。

3.拷貝secondarynamenode checkpoint出來的檔案到fs.checkpoint.dir指向的資料夾

4.執行命令hadoop namenode -importcheckpoint

5.namenode會讀取checkpoint檔案,儲存到dfs.name.dir。

但是如果dfs.name.dir之前已經包含fsimage檔案(非匯入),是會執行失敗的。

因為namenode會檢查fs.checkpoint.dir目錄下映象的一致性,但是不會去改動它。

還提供了另外兩種方法來做checkpoint:checkpoint node和backup node。

checkpoint node和backup node在後續版本中hadoop-0.21.0出現了。

這兩種方式要比通過secondarynamenode來做checkpoint好很多。

checkpoint node像是secondarynamenode的改進替代版,backup node提供更大的便利。

資料載入 儲存

read csv 從檔案 url 檔案物件中載入帶分隔符的資料。預設分隔符為逗號。read table 從檔案 url 檔案物件中載入帶分隔符的資料。預設分隔符為製表符 t 引數 header none 當文字無標題行時,讓pandas為其分配預設的列名。names a b c 當文字無標題行時,為...

Hadoop 元資料持久化

檔案系統元資料的持久化 namenode儲存hdfs的元資料。對於任何對檔案元資料產生修改的操作,namenode都使用乙個稱為editlog的事務日誌記錄下來。例如,在hdfs中建立乙個檔案,namenode就會在editlog中插入一條記錄來表示 同樣,修改檔案的replication因子也將往...

Hadoop資料儲存 Hbase

大家都知道hadoop是乙個資料庫,其實說的的就是hbase。它和我們平常理解的關係型資料庫有什麼區別呢?1.它是nosql的,它沒有sql的介面,有自己的一套api。通過以上描述,我們分析一下hbase的特點 1 儲存海量資料 pb 2 高吞吐 每秒每個節點上千次寫 3 適合處理稀疏資料 半結構化...