HDFS SecondaryNameNode CheckPoint流程示意圖
為什么需要CheckPoint?
NN和2NN工作機制:
思考:NameNode中的元數據是存儲在哪里的?
首先,我們做個假設,如果存儲在NameNode節點的磁盤中,因為經常需要進行隨機訪問,還有響應客戶請求,必然是效率過低。因此,元數據需要存放在內存中。但如果只存在內存中,一旦斷電,元數據丟失,整個集群就無法工作了。因此產生在磁盤中備份元數據的FsImage。
這樣又會帶來新的問題,當在內存中的元數據更新時,如果同時更新FsImage,就會導致效率過低,但如果不更新,就會發生一致性問題,一旦NameNode節點斷電,就會產生數據丟失。因此,引入Edits文件(只進行追加操作,效率很高)。每當元數據有更新或者添加元數據時,修改內存中的元數據并追加到Edits中。這樣,一旦NameNode節點斷電,可以通過FsImage和Edits的合并,合成元數據。
但是,如果長時間添加數據到Edits中,會導致該文件數據過大,效率降低,而且一旦斷電,恢復元數據需要的時間過長。因此,需要定期進行FsImage和Edits的合并,如果這個操作由NameNode節點完成,又會效率過低。因此,引入一個新的節點SecondaryNamenode,專門用于FsImage和Edits的合并。
CheckPoint示意圖:
文字:
1)第一階段:NameNode啟動
(1)第一次啟動NameNode格式化后,創建Fsimage和Edits文件。如果不是第一次啟動,直接加載編輯日志和鏡像文件到內存(此時并沒有塊信息,需要datanode上報)。
(2)客戶端對元數據進行增刪改的請求。
(3)NameNode記錄操作日志,更新滾動日志。
(4)NameNode在內存中對元數據進行增刪改。
2)第二階段:Secondary NameNode工作
(1)Secondary NameNode詢問NameNode是否需要CheckPoint。直接帶回NameNode是否檢查結果。
(2)Secondary NameNode請求執行CheckPoint。
(3)NameNode滾動正在寫的Edits日志。
(4)將滾動前的編輯日志和鏡像文件拷貝到Secondary NameNode。
(5)Secondary NameNode加載編輯日志和鏡像文件到內存,并合并。
(6)生成新的鏡像文件fsimage.chkpoint。
(7)拷貝fsimage.chkpoint到NameNode。
(8)NameNode將fsimage.chkpoint重新命名成fsimage。
CheckPoint時間設置:
[hdfs-default.xml]
通常情況下,SecondaryNameNode每隔一小時執行一次:
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
</property>
一分鐘檢查一次操作次數,3當操作次數達到1百萬時,SecondaryNameNode執行一次:
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>操作動作次數</description>
</property>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60</value>
<description> 1分鐘檢查一次操作次數</description>
</property >
拓展:Fsimage和Edits概念
智能推薦
淺談HDFS的fsimage、edit log與SecondaryNameNode
前言 HDFS SecondaryNameNode是干什么的? 這是道經典的基礎面試題,筆者問過面試者很多次(當然也被面試官問過很多次)。從印象看,大約有一半的被面試者無法正確作答,給出的答案甚至有“ 不就是NameNode的熱備嘛”。本文來簡單聊聊相關的知識,為節省篇幅,將SecondaryNameNode簡稱SNN,NameNode簡稱NN。 NN與fsimage、ed...
HDFS(六):NameNode&&SecondaryNameNode工作機制詳解
NameNode和Secondary NameNode負責管理整個文件系統的元數據,以及每一個路徑(文件)所對應的數據塊信息(目錄)。 下面來看看它們的工作機制: 流程詳解: 1.第一階段:namenode啟動 (1)第一次啟動namenode格式化后,創建fsimage和edits文件。如果不是第一次啟動,直接加載編輯日志和鏡像文件到內存。 (2)客戶端對元數據進行增刪改的請求 (3)namen...
hadoop_hdfs SecondaryNameNode輔助管理FSImage與Edits原理
SecondaryNameNode輔助管理FSImage與Edits原理 原理 原理 完成合并的是secondarynamenode,會請求namenode停止使用edits,暫時將新寫操作放入一個新的文件中(edits.new)。secondarynamenode從namenode中通過http get獲得edits,因為要和fsimage合并,所以也是通過http get 的方式把fsimag...
HDFS中NameNode、SecondaryNameNode和DataNode工作機制
1,NN和2NN的工作機制 思考:NameNode中的元數據是存儲在哪里的? 首先,我們做一個假設,如果存儲在NameNode節點的磁盤中,因為經常需要進行隨機訪問,還有相應客戶請求,必然是效率過低。因此元數據需要存放在內存中。但是如果只存放在內存中,一旦斷電,元數據丟失,整個集群就無法工作了。由此,產生了在磁盤中用于備份元數據的Fsimage。 這...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...