溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

hadoop Secondary NameNode有什么作用

發(fā)布時(shí)間:2021-12-09 15:23:20 來(lái)源:億速云 閱讀:272 作者:小新 欄目:云計(jì)算

這篇文章給大家分享的是有關(guān)hadoop Secondary NameNode有什么作用的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

光從字面上來(lái)理解,很容易讓一些初學(xué)者先入為主的認(rèn)為:SecondaryNameNode(snn)就是NameNode(nn)的熱備進(jìn)程。其 實(shí)不是。snn是HDFS架構(gòu)中的一個(gè)組成部分,但是經(jīng)常由于名字而被人誤解它真正的用途,其實(shí)它真正的用途,是用來(lái)保存namenode中對(duì)HDFS metadata的信息的備份,并減少namenode重啟的時(shí)間。對(duì)于hadoop進(jìn)程中 ,要配置好并正確的使用 snn,還是需要做一些工作的。 hadoop的默認(rèn)配置中讓 snn進(jìn)程默認(rèn)運(yùn)行在了 namenode 的那臺(tái)機(jī)器上,但是這樣的話,如果這臺(tái)機(jī)器出錯(cuò),宕機(jī),對(duì)恢復(fù)HDFS文件系統(tǒng)是很大的災(zāi)難,更好的方式是:將snn的進(jìn)程配置在另外一臺(tái)機(jī)器 上運(yùn)行。

在hadoop中,namenode負(fù)責(zé)對(duì)HDFS的metadata的持久化存儲(chǔ),并且處理來(lái)自客戶端的對(duì)HDFS的各種操作的交互反饋。為了保 證交互速度,HDFS文件系統(tǒng)的metadata是被load到namenode機(jī)器的內(nèi)存中的,并且會(huì)將內(nèi)存中的這些數(shù)據(jù)保存到磁盤進(jìn)行持久化存儲(chǔ)。為 了保證這個(gè)持久化過(guò)程不會(huì)成為HDFS操作的瓶頸,hadoop采取的方式是:沒(méi)有對(duì)任何一次的當(dāng)前文件系統(tǒng)的snapshot進(jìn)行持久化,對(duì)HDFS最 近一段時(shí)間的操作list會(huì)被保存到namenode中的一個(gè)叫Editlog的文件中去。當(dāng)重啟namenode時(shí),除了 load fsImage意外,還會(huì)對(duì)這個(gè)EditLog文件中 記錄的HDFS操作進(jìn)行replay,以恢復(fù)HDFS重啟之前的最終狀態(tài)。

而SecondaryNameNode,會(huì)周期性的將EditLog中記錄的對(duì)HDFS的操作合并到一個(gè)checkpoint中,然后清空 EditLog。所以namenode的重啟就會(huì)Load最新的一個(gè)checkpoint,并replay EditLog中 記錄的hdfs操作,由于EditLog中記錄的是從 上一次checkpoint以后到現(xiàn)在的操作列表,所以就會(huì)比較小。如果沒(méi)有snn的這個(gè)周期性的合并過(guò)程,那么當(dāng)每次重啟namenode的時(shí)候,就會(huì) 花費(fèi)很長(zhǎng)的時(shí)間。而這樣周期性的合并就能減少重啟的時(shí)間。同時(shí)也能保證HDFS系統(tǒng)的完整性。

這就是SecondaryNameNode所做的事情。所以snn并不能分擔(dān)namenode上對(duì)HDFS交互性操作的壓力。盡管如此,當(dāng) namenode機(jī)器宕機(jī)或者namenode進(jìn)程出問(wèn)題時(shí),namenode的daemon進(jìn)程可以通過(guò)人工的方式從snn上拷貝一份metadata 來(lái)恢復(fù)HDFS文件系統(tǒng)。

至于為什么要將SNN進(jìn)程運(yùn)行在一臺(tái)非NameNode的 機(jī)器上,這主要出于兩點(diǎn)考慮:

  • 可擴(kuò)展性: 創(chuàng)建一個(gè)新的HDFS的snapshot需要將namenode中l(wèi)oad到內(nèi)存的metadata信息全部拷貝一遍,這樣的操作需要的內(nèi)存就需要 和namenode占用的內(nèi)存一樣,由于分配給namenode進(jìn)程的內(nèi)存其實(shí)是對(duì)HDFS文件系統(tǒng)的限制,如果分布式文件系統(tǒng)非常的大,那么 namenode那臺(tái)機(jī)器的內(nèi)存就可能會(huì)被namenode進(jìn)程全部占據(jù)。

  • 容錯(cuò)性: 當(dāng)snn創(chuàng)建一個(gè)checkpoint的時(shí)候,它會(huì)將checkpoint拷貝成metadata的幾個(gè)拷貝。將這個(gè)操作運(yùn)行到另外一臺(tái)機(jī)器,還可以提供分布式文件系統(tǒng)的容錯(cuò)性。

配置將SecondaryNameNode運(yùn)行在另外一臺(tái)機(jī)器上

HDFS的一次運(yùn)行實(shí)例是通過(guò)在namenode機(jī)器上的$HADOOP_HOME/bin/start-dfs.sh( 或者start-all.sh ) 腳本來(lái)啟動(dòng)的。這個(gè)腳本會(huì)在運(yùn)行該腳本的機(jī)器上啟動(dòng) namenode進(jìn)程,而slaves機(jī)器上都會(huì)啟動(dòng)DataNode進(jìn)程,slave機(jī)器的列表保存在 conf/slaves文件中,一行一臺(tái)機(jī)器。并且會(huì)在另外一臺(tái)機(jī)器上啟動(dòng)一個(gè)snn進(jìn)程,這臺(tái)機(jī)器由 conf/masters文件指定。所以,這里需要嚴(yán)格注意, conf/masters 文件中指定的機(jī)器,并不是說(shuō)jobtracker或者namenode進(jìn)程要 運(yùn)行在這臺(tái)機(jī)器上,因?yàn)檫@些進(jìn)程是運(yùn)行在 launch bin/start-dfs.sh或者 bin/start-mapred.sh(start-all.sh)的機(jī)器上的。所以,masters這個(gè)文件名是非常的令人混淆的,應(yīng)該叫做 secondaries會(huì)比較合適。然后,通過(guò)以下步驟:

  1. 將所有想要運(yùn)行secondarynamenode進(jìn)程的機(jī)器寫到masters文件中,一行一臺(tái)。

  2. 修改在masters文件中配置了的機(jī)器上的conf/hadoop-site.xml文件,加上如下選項(xiàng):

<property>  
<name>dfs.http.address</name>  
<value>namenode.hadoop-host.com:50070</value>  
</property>

  core-site.xml:這里有2個(gè)參數(shù)可配置,但一般來(lái)說(shuō)我們不做修改。fs.checkpoint.period表示多長(zhǎng)時(shí)間記錄一次hdfs的鏡像。默認(rèn)是1小時(shí)。fs.checkpoint.size表示一次記錄多大的size,默認(rèn)64M。

<property>  
  <name>fs.checkpoint.period</name>  
  <value>3600</value>  
  <description>The number of seconds between two periodic checkpoints.  
  </description>  
</property>  
  
<property>  
  <name>fs.checkpoint.size</name>  
  <value>67108864</value>  
  <description>The size of the current edit log (in bytes) that triggers  
       a periodic checkpoint even if the fs.checkpoint.period hasn't expired.  
  </description>  
</property>
 
<property> 
    <name>fs.checkpoint.dir</name> 
    <value>/data/work/hdfs/namesecondary</value> 
    <description>Determines where on the local filesystem the DFS secondary name node should store the temporary images to merge. If this is a comma-delimited list of directories then the image is replicated in all of the directories for redundancy. </description> 
</property>

3、配置檢查。配置完成之后,我們需要檢查一下是否成功。我們可以通過(guò)查看運(yùn)行secondarynamenode的機(jī)器上文件目錄來(lái)確定是否成功 配置。首先輸入jps查看是否存在secondarynamenode進(jìn)程。如果存在,在查看對(duì)應(yīng)的目錄下是否有備份記錄。該目錄一般存在于hadoop.tmp.dir/dfs/namesecondary/下面。

四、恢復(fù)

制造namenode宕機(jī)的情況
1) kill 掉namenode的進(jìn)程

[root@master name]# jps 
11749 NameNode 
12339 Jps 
11905 JobTracker 
[root@master name]# kill 11749

2)刪除dfs.name.dir所指向的文件夾,這里是/data/work/hdfs/name

[root@master name]# rm -rf *

刪除name目錄下的所有內(nèi)容,但是必須保證name這個(gè)目錄是存在的

3)從secondarynamenode遠(yuǎn)程拷貝namesecondary文件到namenode的namesecondary

[root@master hdfs]# scp -r slave-001:/data/work/hdfs/namesecondary/ ./

4)啟動(dòng)namenode

[root@master /data]# hadoop namenode –importCheckpoint

正常啟動(dòng)以后,屏幕上會(huì)顯示很多l(xiāng)og,這個(gè)時(shí)候namenode就可以正常訪問(wèn)了

5)檢查

使用hadoop fsck /user命令檢查文件Block的完整性

hadoop fsck /

6)停止namenode,使用crrl+C或者會(huì)話結(jié)束

7)刪除namesecondary目錄下的文件(保存干凈)

[root@master namesecondary]# rm -rf *

8)正式啟動(dòng)namenode

[root@master bin]# ./hadoop-daemon.sh start  namenode

恢復(fù)工作完成,檢查hdfs的數(shù)據(jù)

9)balancer

在使用start-balancer.sh時(shí), 默認(rèn)使用1M/S(1048576)的速度移動(dòng)數(shù)據(jù)(so slowly...)
修改hdfs-site.xml配置,這里我們使用的是20m/S

<property> 
<name>dfs.balance.bandwidthPerSec</name> 
<value>20971520</value> 
<description> Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. </description> 
</property>

然后結(jié)果是導(dǎo)致job運(yùn)行變得不穩(wěn)定,出現(xiàn)一些意外的長(zhǎng)map單元,某些reduce時(shí)間處理變長(zhǎng)(整個(gè)集群負(fù)載滿滿的情況下,外加20m/s的balance),據(jù)說(shuō)淘寶的為10m/s,需要調(diào)整后實(shí)驗(yàn),看看情況如何。

hadoop balancer -threshold 5

五、總結(jié)

1、secondarynamenode可以配置多個(gè),master文件里面多寫幾個(gè)就可以。

2、千萬(wàn)記得如果要恢復(fù)數(shù)據(jù)是需要手動(dòng)拷貝到namenode機(jī)器上的。不是自動(dòng)的(參看上面寫的恢復(fù)操作)。

3、鏡像備份的周期時(shí)間是可以修改的,如果不想一個(gè)小時(shí)備份一次,可以改的時(shí)間短點(diǎn)。core-site.xml中的fs.checkpoint.period值

感謝各位的閱讀!關(guān)于“hadoop Secondary NameNode有什么作用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI