日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Hadoop學(xué)習(xí)之路(十二)分布式集群中HDFS系統(tǒng)的各種角色

 HK123COM 2019-02-14

目錄

 


NameNode

學(xué)習(xí)目標(biāo)

理解 namenode 的工作機(jī)制尤其是元數(shù)據(jù)管理機(jī)制,以增強(qiáng)對 HDFS 工作原理的 理解,及培養(yǎng) hadoop 集群運(yùn)營中“性能調(diào)優(yōu)”、“namenode”故障問題的分析解決能力

問題場景

1、Namenode 服務(wù)器的磁盤故障導(dǎo)致 namenode 宕機(jī),如何挽救集群及數(shù)據(jù)?

2、Namenode 是否可以有多個?namenode 內(nèi)存要配置多大?namenode 跟集群數(shù)據(jù)存儲能 力有關(guān)系嗎?

3、文件的 blocksize 究竟調(diào)大好還是調(diào)小好?結(jié)合 mapreduce

NameNode的職責(zé)

1、負(fù)責(zé)客戶端請求(讀寫數(shù)據(jù)  請求 )的響應(yīng) 
2、維護(hù)目錄樹結(jié)構(gòu)( 元數(shù)據(jù)的管理: 查詢,修改 )
3、配置和應(yīng)用副本存放策略
4、管理集群數(shù)據(jù)塊負(fù)載均衡問題

NameNode元數(shù)據(jù)的管理

WAL(Write ahead Log): 預(yù)寫日志系統(tǒng)

  在計(jì)算機(jī)科學(xué)中,預(yù)寫式日志(Write-ahead logging,縮寫 WAL)是關(guān)系數(shù)據(jù)庫系統(tǒng)中 用于提供原子性和持久性(ACID 屬性中的兩個)的一系列技術(shù)。在使用 WAL 的系統(tǒng)中,所 有的修改在提交之前都要先寫入 log 文件中。

  Log 文件中通常包括 redo 和 undo 信息。這樣做的目的可以通過一個例子來說明。假設(shè) 一個程序在執(zhí)行某些操作的過程中機(jī)器掉電了。在重新啟動時,程序可能需要知道當(dāng)時執(zhí)行 的操作是成功了還是部分成功或者是失敗了。如果使用了 WAL,程序就可以檢查 log 文件, 并對突然掉電時計(jì)劃執(zhí)行的操作內(nèi)容跟實(shí)際上執(zhí)行的操作內(nèi)容進(jìn)行比較。在這個比較的基礎(chǔ) 上,程序就可以決定是撤銷已做的操作還是繼續(xù)完成已做的操作,或者是保持原樣。

  WAL 允許用 in-place 方式更新數(shù)據(jù)庫。另一種用來實(shí)現(xiàn)原子更新的方法是 shadow paging, 它并不是 in-place 方式。用 in-place 方式做更新的主要優(yōu)點(diǎn)是減少索引和塊列表的修改。ARIES 是 WAL 系列技術(shù)常用的算法。在文件系統(tǒng)中,WAL 通常稱為 journaling。PostgreSQL 也是用 WAL 來提供 point-in-time 恢復(fù)和數(shù)據(jù)庫復(fù)制特性。

  NameNode 對數(shù)據(jù)的管理采用了兩種存儲形式:內(nèi)存和磁盤

  首先是內(nèi)存中存儲了一份完整的元數(shù)據(jù),包括目錄樹結(jié)構(gòu),以及文件和數(shù)據(jù)塊和副本存儲地 的映射關(guān)系;

1、內(nèi)存元數(shù)據(jù) metadata(全部存在內(nèi)存中),其次是在磁盤中也存儲了一份完整的元數(shù)據(jù)。

2、磁盤元數(shù)據(jù)鏡像文件 fsimage_0000000000000000555

fsimage_0000000000000000555 等價于

edits_0000000000000000001-0000000000000000018

……

edits_0000000000000000444-0000000000000000555

合并之和

3、數(shù)據(jù)歷史操作日志文件 edits:edits_0000000000000000001-0000000000000000018 (可通過日志運(yùn)算出元數(shù)據(jù),全部存在磁盤中)

4、數(shù)據(jù)預(yù)寫操作日志文件 edits_inprogress_0000000000000000556 (存儲在磁盤中)

metadata = 最新 fsimage_0000000000000000555 + edits_inprogress_0000000000000000556

metadata = 所有的 edits 之和(edits_001_002 + …… + edits_444_555 + edits_inprogress_556)

VERSION(存放 hdfs 集群的版本信息)文件解析:

復(fù)制代碼
#Sun Jan 06 20:12:30 CST 2017 ## 集群啟動時間
namespaceID=844434736 ## 文件系統(tǒng)唯一標(biāo)識符
clusterID=CID-5b7b7321-e43f-456e-bf41-18e77c5e5a40 ## 集群唯一標(biāo)識符
cTime=0 ## fsimage 創(chuàng)建的時間,初始為 0,隨 layoutVersion 更新
storageType=NAME_NODE ##節(jié)點(diǎn)類型
blockpoolID=BP-265332847-192.168.123.202-1483581570658 ## 數(shù)據(jù)塊池 ID,可以有多個
layoutVersion=-60 ## hdfs 持久化數(shù)據(jù)結(jié)構(gòu)的版本號
復(fù)制代碼

查看 edits 文件信息: 

hdfs oev -i edits_0000000000000000482-0000000000000000483 -o edits.xml 
cat edits.xml

 

查看 fsimage 鏡像文件信息: 

hdfs oiv -i fsimage_0000000000000000348 -p XML -o fsimage.xml 
cat fsimage.xml

NameNode 元數(shù)據(jù)存儲機(jī)制

A、內(nèi)存中有一份完整的元數(shù)據(jù)(內(nèi)存 metadata)

B、磁盤有一個“準(zhǔn)完整”的元數(shù)據(jù)鏡像(fsimage)文件(在 namenode 的工作目錄中)

C、用于銜接內(nèi)存 metadata 和持久化元數(shù)據(jù)鏡像 fsimage 之間的操作日志(edits 文件)

(PS:當(dāng)客戶端對 hdfs 中的文件進(jìn)行新增或者修改操作,操作記錄首先被記入 edits 日志 文件中,當(dāng)客戶端操作成功后,相應(yīng)的元數(shù)據(jù)會更新到內(nèi)存 metadata 中)

DataNode

問題場景

1、集群容量不夠,怎么擴(kuò)容?

2、如果有一些 datanode 宕機(jī),該怎么辦?

3、datanode 明明已啟動,但是集群中的可用 datanode 列表中就是沒有,怎么辦?

Datanode 工作職責(zé)

1、存儲管理用戶的文件塊數(shù)據(jù)

2、定期向 namenode 匯報(bào)自身所持有的 block 信息(通過心跳信息上報(bào))

(PS:這點(diǎn)很重要,因?yàn)?,?dāng)集群中發(fā)生某些 block 副本失效時,集群如何恢復(fù) block 初始 副本數(shù)量的問題)

復(fù)制代碼
<property>
 <!—HDFS 集群數(shù)據(jù)冗余塊的自動刪除時長,單位 ms,默認(rèn)一個小時 -->
<name>dfs.blockreport.intervalMsec</name>
<value>3600000</value>
<description>Determines block reporting interval in milliseconds.</description>
</property>
復(fù)制代碼

Datanode 掉線判斷時限參數(shù)

datanode 進(jìn)程死亡或者網(wǎng)絡(luò)故障造成 datanode 無法與 namenode 通信,namenode 不會立即 把該節(jié)點(diǎn)判定為死亡,要經(jīng)過一段時間,這段時間暫稱作超時時長。HDFS 默認(rèn)的超時時長 為 10 分鐘+30 秒。如果定義超時時間為 timeout,則超時時長的計(jì)算公式為: t

imeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval

而默認(rèn)的 heartbeat.recheck.interval 大小為 5 分鐘,dfs.heartbeat.interval 默認(rèn)為 3 秒。 需要注意的是 hdfs-site.xml 配置文件中的 heartbeat.recheck.interval 的單位為毫秒, dfs.heartbeat.interval 的單位為秒。 所以,舉個例子,如果 heartbeat.recheck.interval 設(shè)置為 5000(毫秒),dfs.heartbeat.interval 設(shè)置為 3(秒,默認(rèn)),則總的超時時間為 40 秒。

復(fù)制代碼
<property>
 <name>heartbeat.recheck.interval</name>
 <value>5000</value>
</property>
<property>
 <name>dfs.heartbeat.interval</name>
 <value>3</value>
</property>
復(fù)制代碼

SecondaryNameNode

SecondaryNamenode 工作機(jī)制

SecondaryNamenode 的作用就是分擔(dān) namenode 的合并元數(shù)據(jù)的壓力。所以在配置 SecondaryNamenode 的工作節(jié)點(diǎn)時,一定切記,不要和 namenode 處于同一節(jié)點(diǎn)。但事實(shí)上, 只有在普通的偽分布式集群和分布式集群中才有會 SecondaryNamenode 這個角色,在 HA 或 者聯(lián)邦集群中都不再出現(xiàn)該角色。在 HA 和聯(lián)邦集群中,都是有 standby namenode 承擔(dān)。

元數(shù)據(jù)的 CheckPoint

每隔一段時間,會由 secondary namenode 將 namenode 上積累的所有 edits 和一個最新的 fsimage 下載到本地,并加載到內(nèi)存進(jìn)行 merge(這個過程稱為 checkpoint) CheckPoint 詳細(xì)過程圖解:

CheckPoint 觸發(fā)配置

復(fù)制代碼
dfs.namenode.checkpoint.check.period=60 ##檢查觸發(fā)條件是否滿足的頻率,60 秒
dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
##以上兩個參數(shù)做 checkpoint 操作時,secondary namenode 的本地工作目錄
dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir}
dfs.namenode.checkpoint.max-retries=3 ##最大重試次數(shù)
dfs.namenode.checkpoint.period=3600 ##兩次 checkpoint 之間的時間間隔 3600 秒
dfs.namenode.checkpoint.txns=1000000 ##兩次 checkpoint 之間最大的操作記錄
復(fù)制代碼

CheckPoint 附帶作用

Namenode 和 SecondaryNamenode 的工作目錄存儲結(jié)構(gòu)完全相同,所以,當(dāng) Namenode 故障 退出需要重新恢復(fù)時,可以從SecondaryNamenode的工作目錄中將fsimage拷貝到Namenode 的工作目錄,以恢復(fù) namenode 的元數(shù)據(jù)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多