HDFS基礎(chǔ)

一敌厘、Hadoop

Hadoop是Apache開源的大數(shù)據(jù)存儲(chǔ)及分析的工具。

  • 數(shù)據(jù)存儲(chǔ)
    • 以自帶的旗艦級(jí)分布式文件系統(tǒng)HDFS(Hadoop Distributed FileSystem)虐骑,存儲(chǔ)大數(shù)據(jù)文件。
  • 數(shù)據(jù)分析
    • 基于MapReduce框架的分析系統(tǒng)赎线,適合的問題有
      • 需要以批處理的方式從分析整個(gè)數(shù)據(jù)集的問題
      • 一次寫入廷没,多次讀取
    • hadoop以數(shù)據(jù)本地化的特性來實(shí)現(xiàn)數(shù)據(jù)的快速分析。

下圖展示的是最基礎(chǔ)的Hadoop的框架及常用的周邊服務(wù)

Hadoop簡(jiǎn)單框架

二垂寥、HDFS假設(shè)及目標(biāo)

HDFS是一種高容錯(cuò)颠黎、以流式數(shù)據(jù)訪問模式存儲(chǔ)超大文件,運(yùn)行于商用(低成本)硬件集群上滞项。它包含一下假設(shè)及目標(biāo):

  • 節(jié)點(diǎn)故障
    • Hadoop并不需要運(yùn)行在昂貴且高可靠的硬件上狭归,它是設(shè)計(jì)運(yùn)行在商用硬件(在各種零售商店都能買到的普通硬件)集群上的,因此對(duì)于龐大的集群來說節(jié)點(diǎn)故障與其說是一個(gè)異常不如說是一種正澄呐校現(xiàn)象过椎。所以快速監(jiān)測(cè)故障并自動(dòng)恢復(fù)是HDFS的核心架構(gòu)目標(biāo)。
  • 大文件
    • HDFS支持幾百M(fèi)B戏仓、幾百GB甚至幾百TB的文件疚宇。
    • HDFS的設(shè)計(jì)思路是一次寫入竞惋、多次讀取是最高效的訪問模式,所以一旦文件被創(chuàng)建灰嫉、寫入、關(guān)閉后嗓奢,除了在文件最后追加以及清除文件全部?jī)?nèi)容之外讼撒,其他操作均被禁止。
    • 也正是因?yàn)榇笪募脑騂adoop認(rèn)為移動(dòng)計(jì)算比移動(dòng)數(shù)據(jù)更合適股耽,即計(jì)算本地性根盒。
  • 流式數(shù)據(jù)訪問
    • 流式訪問相對(duì)于隨機(jī)訪問,只需一次尋址物蝙,然后順序讀取數(shù)據(jù)塊炎滞。
    • HDFS認(rèn)為每次分析都將涉及到數(shù)據(jù)集的大部分甚至全部(即批處理,非交互式使用)诬乞,因此讀取整個(gè)數(shù)據(jù)集的時(shí)間延遲比讀取第一條記錄的時(shí)間延遲更重要(即強(qiáng)調(diào)高吞吐册赛,非低時(shí)間延遲訪問)。

從上面的假設(shè)和目標(biāo)我們很容易推斷出哪些應(yīng)用不適合在HDFS上運(yùn)行:

  • 低時(shí)間延遲的數(shù)據(jù)訪問
    • 要求幾十毫秒的應(yīng)用不適合在HDFS上運(yùn)行震嫉。HDFS是為高數(shù)據(jù)吞吐量應(yīng)用優(yōu)化的森瘪,這可能會(huì)以提高實(shí)踐延遲為代價(jià)。
  • 大量的小文件
    • 由于namenode將文件系統(tǒng)的元數(shù)據(jù)存儲(chǔ)在內(nèi)存中票堵,因此文件系統(tǒng)的文件總數(shù)受限于namenode的內(nèi)存容量扼睬。因此大量的小文件很可能使得OOM。
  • 多用戶寫入悴势,任意修改文件
    • HDFS文件寫入只支持單個(gè)寫入者窗宇,并且寫操作總是以只添加的方式在文件末尾寫數(shù)據(jù),不支持多寫入特纤、任意位置修改军俊。

三、HDFS基本概念

1 數(shù)據(jù)塊

HDFS將文件劃分為不同的塊(chunk)捧存,作為獨(dú)立的存儲(chǔ)單元蝇完,默認(rèn)為128M(可通過hdfs-site.xmldfs.blocksize屬性來修改)。HDFS的塊比磁盤的塊(512B)大矗蕊,目的是為了最小化尋址的開銷短蜕。如果塊足夠大,從磁盤傳輸數(shù)據(jù)的時(shí)間會(huì)明顯大于定位這個(gè)塊開始位置所需的時(shí)間傻咖。

對(duì)文件進(jìn)行塊的抽象朋魔,有以下好處:

  • 一個(gè)文件的大小可以大于網(wǎng)絡(luò)中任意一個(gè)磁盤的容量
  • 簡(jiǎn)化了存儲(chǔ)子系統(tǒng)的設(shè)計(jì):塊大小固定,計(jì)算磁盤能存儲(chǔ)的塊相對(duì)容易卿操,簡(jiǎn)化管理存儲(chǔ)警检;將塊的存儲(chǔ)和元數(shù)據(jù)的存儲(chǔ)分離孙援。
  • 適用于數(shù)據(jù)備份進(jìn)而提供數(shù)據(jù)容錯(cuò)能力和提高可用性。

2 NameNode和DataNode

HDFS集群有兩類節(jié)點(diǎn)以master-slaves的模式運(yùn)行扇雕,即一個(gè)namenode(master)和多個(gè)datanode(slaves)拓售。

namenode

  • namenode管理文件系統(tǒng)的命名空間,它維護(hù)著文件系統(tǒng)樹及整棵樹內(nèi)所有的文件和目錄镶奉。這些信息以兩個(gè)文件形式永久保存在本地磁盤:文件系統(tǒng)鏡像(FsImage)和編輯日志(EditLog)础淤。
  • namenode也記錄著每個(gè)文件中各個(gè)塊所在的datanode信息,但它不保存到文件中哨苛,而是在內(nèi)存中鸽凶,在系統(tǒng)啟動(dòng)時(shí)根據(jù)datanode的信息重建,并根據(jù)datanode發(fā)送的心跳信息更新文件塊所在的datanode映射關(guān)系建峭。
  • namenode還負(fù)責(zé)控制客戶端(client)訪問文件玻侥。客戶端通過hadoop披露的文件系統(tǒng)命名空間來進(jìn)行文件操作亿蒸〈绽迹客戶端首先向namenode詢問文件塊所在的datanode,然后連接datanode發(fā)送讀寫的請(qǐng)求边锁。
  • namenode分為活動(dòng)namenode(active namenode)票摇,輔助namenode(secondary namenode:負(fù)責(zé)定期合并FsImage和EditLog(checkpoint),以防止EditLog過大砚蓬,一般運(yùn)行在獨(dú)立的機(jī)器上矢门,因?yàn)樗枰鷑amenode同樣的內(nèi)存大小)灰蛙,備用namenode(standby namenode:當(dāng)主namenode發(fā)生故障時(shí)可進(jìn)行熱替換)

datanode

  • datanode是文件系統(tǒng)的工作節(jié)點(diǎn)祟剔,存儲(chǔ)文件塊,并定時(shí)向namenode發(fā)送他們所存儲(chǔ)的塊列表摩梧。
  • 一個(gè)文件一般來說會(huì)被切分為多個(gè)數(shù)據(jù)塊存儲(chǔ)到一系列的datanode中物延。
  • datanode還負(fù)責(zé)塊創(chuàng)建、檢測(cè)仅父、根據(jù)namenode的指示創(chuàng)建復(fù)本叛薯。

下圖展示了client、namenode笙纤、datanode之間的通信過程耗溜。

組件間通信流程

3 FsImage和EditLog

EditLog

文件系統(tǒng)客戶端執(zhí)行寫操作時(shí),這些事務(wù)首先會(huì)被記錄到EditLog中省容。namenode在內(nèi)存中維護(hù)文件系統(tǒng)元數(shù)據(jù)抖拴,當(dāng)編輯日志被修改時(shí),相關(guān)元數(shù)據(jù)也同步更新腥椒。內(nèi)存中的元數(shù)據(jù)可支持客戶端的讀操作阿宅。

EditLog在概念上是單個(gè)實(shí)體候衍,但它體現(xiàn)為磁盤上的多個(gè)文件,

FsImage

每個(gè)fsImage文件都是文件元數(shù)據(jù)的一個(gè)完整的永久性檢查點(diǎn)洒放。包含了文件系統(tǒng)中的所有目錄信息(修改時(shí)間蛉鹿、訪問許可和配額元數(shù)據(jù))和文件信息(復(fù)本數(shù)、修改時(shí)間往湿、訪問時(shí)間妖异、訪問許可、塊大小煌茴、組成一個(gè)文件的塊等)的序列化數(shù)據(jù)。數(shù)據(jù)塊存儲(chǔ)在datanode日川,但fsimage并不描述datanode蔓腐,取而代之的是namenode將這種塊和datanode的映射關(guān)系存儲(chǔ)在內(nèi)存中。當(dāng)datanode加入集群時(shí)龄句,namenode向datanode索取塊列表以建立塊映射關(guān)系回论;namenode還將定時(shí)根據(jù)datanode上報(bào)的信息更新塊映射。

fsImage默認(rèn)存儲(chǔ)在file://${hadoop.tmp.dir}/dfs/name下分歇,可通過修改dfs.namenode.name.dir或者 hadoop.tmp.dir 的值來更換存儲(chǔ)位置

并非每個(gè)寫操作都會(huì)更新該文件傀蓉,因?yàn)閒simage是一個(gè)大型文件,如果頻繁執(zhí)行寫操作职抡,會(huì)使系統(tǒng)運(yùn)行緩慢葬燎。但這不影響系統(tǒng)的恢復(fù)能力,當(dāng)namenode啟動(dòng)或者發(fā)生故障重啟時(shí)缚甩,最近的fsimage文件會(huì)被load進(jìn)內(nèi)存作為構(gòu)建元數(shù)據(jù)的最近狀態(tài)谱净,然后再從相關(guān)點(diǎn)開始向前執(zhí)行EditLog中的每個(gè)事務(wù)。

為了減少啟動(dòng)時(shí)恢復(fù)的EditLog事務(wù)的時(shí)間擅威,HDFS會(huì)在輔助namenode或者備用namenode上執(zhí)行fsimage和EditLog的合并壕探,創(chuàng)建元數(shù)據(jù)檢查點(diǎn)。創(chuàng)建檢查點(diǎn)的步驟如下:

  1. 輔助namenode請(qǐng)求主namenode停止使用正在驚醒的EditLog文件郊丛,這樣新的編輯日志操作記錄到一個(gè)新文件中李请。
  2. 輔助namenode從主namenode獲取最近的fsimage和edits文件(采用HTTP GET)
  3. 輔助namenode將fsimage文件載入內(nèi)存,逐一執(zhí)行edits文件中的事務(wù)厉熟,創(chuàng)建新的合并后的fsimage文件导盅。
  4. 輔助namenode將新的fsimage文件發(fā)送回主namenode(使用HTTP PUT),主namenode將其保存為臨時(shí)的.ckpt文件
  5. 主namenode重新命名臨時(shí)的fsimage文件揍瑟,便于日后使用

最終认轨,主namenode擁有最新的fsimage和一個(gè)更小的正在進(jìn)行中的editLog文件窟勃。上面的過程也解釋了為何輔助namenode需要和主namenode相近的內(nèi)存需求空間(輔助namenode也需要將fsimage載入內(nèi)存)袱院。

創(chuàng)建檢查點(diǎn)的觸發(fā)條件收兩個(gè)參數(shù)的控制蔑匣。dfs.namenode.checkpoint.period(單位為秒)來控制時(shí)間間隔掸掸,dfs.namenode.checkpoint.txns控制從上一個(gè)檢查點(diǎn)開始編輯日志的事務(wù)個(gè)數(shù)(檢查頻率通過dfs.namenode.check.period來控制)。

在安全模式下也可手動(dòng)執(zhí)行hadoop dfsadmin -saveNamespace來執(zhí)行檢查點(diǎn)的創(chuàng)建纪蜒。

4 復(fù)本

HDFS將文件的數(shù)據(jù)塊衷恭,在不同機(jī)器上存儲(chǔ)多份(復(fù)本)以達(dá)到容錯(cuò)。每個(gè)文件塊的復(fù)本個(gè)數(shù)可以通過dfs.replication來配置纯续,默認(rèn)為3随珠。namenode根據(jù)內(nèi)存中的塊的映射關(guān)系,來決定復(fù)本存放的位置猬错。

選擇策略:

  1. 在運(yùn)行客戶端的datanode上房第一個(gè)復(fù)本(如果客戶端運(yùn)行在集群之外窗看,就隨機(jī)選擇一個(gè)節(jié)點(diǎn),但會(huì)避免存儲(chǔ)太慢或者太忙的節(jié)點(diǎn))
  2. 第2個(gè)復(fù)本放在與第一個(gè)不同且隨機(jī)另外選擇的機(jī)架中節(jié)點(diǎn)上
  3. 第3個(gè)復(fù)本放在與第二個(gè)復(fù)本相同的機(jī)架上倦炒,且隨機(jī)選擇另一個(gè)節(jié)點(diǎn)
  4. 其他復(fù)本放在集群中隨機(jī)選擇的節(jié)點(diǎn)上显沈,不過系統(tǒng)會(huì)盡量避免在同一個(gè)機(jī)架上房太多的復(fù)本(最大值為(復(fù)本數(shù) - 1 )/機(jī)架數(shù) + 2)

一旦選擇復(fù)本位置,就根據(jù)網(wǎng)絡(luò)拓?fù)鋭?chuàng)建一個(gè)管線逢唤。如果復(fù)本數(shù)為3拉讯,則有如下的管線

復(fù)本

5 安全模式

namenode啟動(dòng)時(shí),首先將fsimage文件載入內(nèi)存鳖藕,并執(zhí)行編輯日志的各項(xiàng)編輯操作魔慷。一旦在內(nèi)存中成功建立文件系統(tǒng)的元數(shù)據(jù)的映像,則創(chuàng)建一個(gè)新的fsimage文件和一個(gè)空白的EditLog文件著恩。這個(gè)過程中院尔,namenode運(yùn)行在安全模式,意味著namenode文件系統(tǒng)對(duì)于客戶端是只讀的喉誊。

在安全模式下召边,各個(gè)datanode會(huì)向namenode發(fā)送最新的塊列表信息,當(dāng)滿足“最小復(fù)本條件”裹驰,namenode會(huì)在30秒后退出安全模式隧熙。“最小復(fù)本條件”是指整個(gè)文件系統(tǒng)中有99.9%的塊滿足最小復(fù)本數(shù)幻林,在啟動(dòng)一個(gè)剛剛格式化的HDFS集群是贞盯,那namenode不會(huì)進(jìn)入安全模式。

  1. 通過 hdfs dfsadmin -safemode get 來查看是否處于安全模式
  2. 通過 hdfs dfsadmin -safemode enter進(jìn)入安全模式
  3. 通過hdfs dfsadmin -safemode leave離開安全模式

安全模式的相關(guān)配置如下:

安全模式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沪饺,一起剝皮案震驚了整個(gè)濱河市躏敢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌整葡,老刑警劉巖件余,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡啼器,警方通過查閱死者的電腦和手機(jī)旬渠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來端壳,“玉大人告丢,你說我怎么就攤上這事∷鹎” “怎么了岖免?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)照捡。 經(jīng)常有香客問我颅湘,道長(zhǎng),這世上最難降的妖魔是什么栗精? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任闯参,我火速辦了婚禮,結(jié)果婚禮上术羔,老公的妹妹穿的比我還像新娘赢赊。我一直安慰自己乙漓,他們只是感情好级历,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叭披,像睡著了一般寥殖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涩蜘,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天嚼贡,我揣著相機(jī)與錄音,去河邊找鬼同诫。 笑死粤策,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的误窖。 我是一名探鬼主播叮盘,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼霹俺!你這毒婦竟也來了柔吼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤丙唧,失蹤者是張志新(化名)和其女友劉穎愈魏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡培漏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年溪厘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片北苟。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桩匪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出友鼻,到底是詐尸還是另有隱情傻昙,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布彩扔,位于F島的核電站妆档,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏虫碉。R本人自食惡果不足惜贾惦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望敦捧。 院中可真熱鬧须板,春花似錦、人聲如沸兢卵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秽荤。三九已至甜奄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窃款,已是汗流浹背课兄。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晨继,地道東北人烟阐。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像紊扬,于是被迫代替她去往敵國(guó)和親蜒茄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 首先珠月,我們?cè)谑褂们跋瓤纯碒DFS是什麼扩淀?這將有助于我們是以后的運(yùn)維使用和故障排除思路的獲得。 HDFS采用mast...
    W_Bousquet閱讀 4,196評(píng)論 0 2
  • 認(rèn)識(shí)HDFS HDFS的特點(diǎn): 高容錯(cuò)性高吞吐量故障的檢測(cè)和自動(dòng)快速恢復(fù)流式的數(shù)據(jù)訪問大數(shù)據(jù)集一次寫入,多次讀寫 ...
    Bloo_m閱讀 3,262評(píng)論 6 8
  • 第一次以教練的身份參與課程啤挎,是榮幸的驻谆,也印證了“服務(wù)的人越多卵凑,效能越大”。 其實(shí)此前胜臊,經(jīng)歷了“筆試”與“面試”勺卢,可...
    車前小草閱讀 247評(píng)論 0 1
  • 生 活 的 樂 趣 來 自 我 們 不 斷 的 更 新 和體 驗(yàn)。 沒 有 什 么 比 每 天 看 到 不 同 的...
    KKris_d9f6閱讀 292評(píng)論 0 4