大數(shù)據(jù)系列 2:分布式文件系統(tǒng) HDFS

題圖

Google 三架馬車(chē)中凹炸,第一架即是 GFS(Googel File system )

文件系統(tǒng)從垂直伸縮到水平伸縮

早期进陡,為了提升計(jì)算機(jī)的運(yùn)算以及存儲(chǔ)能力额各,主要靠的是垂直伸縮的方式绎速。摩爾定律提出集成電路上晶體管的數(shù)目每?jī)赡陼?huì)增加一倍八毯。當(dāng)時(shí),半導(dǎo)體行業(yè)大致按照摩爾定律發(fā)展了半個(gè)多世紀(jì)讶踪。

獨(dú)立硬盤(pán)冗余陣列(RAID, Redundant Array of Independent Disks)可以認(rèn)為是一種垂直伸縮。其基本思想是把多個(gè)磁盤(pán)組裝起來(lái)稱(chēng)為一個(gè)磁盤(pán)陣列泊交,使之性能達(dá)到甚至超過(guò)一個(gè)價(jià)格昂貴柱查、容量巨大的硬盤(pán)雏婶。根據(jù) RAID 實(shí)現(xiàn)方式的不同物赶,可以有不同的效果,包括提升容量留晚、磁盤(pán)容錯(cuò)酵紫、處理性能错维。

互聯(lián)網(wǎng)時(shí)代,計(jì)算機(jī)硬件的性能提升早已放緩参歹,公司購(gòu)買(mǎi)大型計(jì)算機(jī)的成本是很大的隆判,所以開(kāi)始出現(xiàn)水平伸縮的方式,通過(guò)分布式技術(shù)臭挽,在集群中不斷增加計(jì)算機(jī)來(lái)提升計(jì)算能力咬腕。將 RAID 的思想應(yīng)用到分布式集群,就產(chǎn)生了分布式文件系統(tǒng)纽帖,分布式存儲(chǔ)技術(shù)的典型代表就是 HDFS举反。

HDFS (Hadoop Distributed File System) 被設(shè)計(jì)用來(lái)搭建大規(guī)模的分布式集群,提供海量數(shù)據(jù)的讀寫(xiě)吹截、存儲(chǔ)凝危。

HDFS 的特點(diǎn)和設(shè)計(jì)目標(biāo):

  • 硬件容錯(cuò) 大規(guī)模集群有大量節(jié)點(diǎn),硬件會(huì)有一定的損壞概率懦铺,所以 HDFS 支持錯(cuò)誤檢測(cè)支鸡,快速和自動(dòng)的恢復(fù)服務(wù)趁窃。

  • 流式訪問(wèn) HDFS 支持流式訪問(wèn)數(shù)據(jù)醒陆,被設(shè)計(jì)用于批量處理而非用戶(hù)交互裆针。重點(diǎn)是高吞吐量訪問(wèn)而不是低延遲。(換句話(huà)受澡刹,HDFS 為高吞吐量而設(shè)計(jì)耘婚,以高延遲為代價(jià))

  • 存儲(chǔ)大文件 HDFS 適合存儲(chǔ)大型文件,并將文件分塊存儲(chǔ)到不同的節(jié)點(diǎn)上嚷闭。

  • 簡(jiǎn)單一致性模型 一次寫(xiě)入赖临,多次讀取思杯。支持追加數(shù)據(jù)挠进,不支持修改數(shù)據(jù)內(nèi)容。這樣的設(shè)計(jì)簡(jiǎn)化了一致性模型暖璧,支持高吞吐量的訪問(wèn)君旦。

  • 移動(dòng)計(jì)算比移動(dòng)數(shù)據(jù)更劃算 程序比數(shù)據(jù)小得多,那么將程序分發(fā)到數(shù)據(jù)所在得地方進(jìn)行計(jì)算局蚀。比如 Mapreduce 任務(wù)在多個(gè)節(jié)點(diǎn)上分別運(yùn)行后再分別聚合的思路恕稠。

  • 跨平臺(tái) HDFS 作為大數(shù)據(jù)存儲(chǔ)鹅巍,被廣泛應(yīng)用于多種大數(shù)據(jù)平臺(tái)料祠。

HDFS 架構(gòu)

HDFS 架構(gòu)

HDFS 的架構(gòu)如上圖所示澎羞∽苯剩可以看到其中的關(guān)鍵組件包括一個(gè) NameNode(NN) 和多個(gè) DataNode(DN),事實(shí)上大部分的分布式技術(shù)都是類(lèi)似這樣的主從(Master-Slave) 結(jié)構(gòu)塘匣。

HDFS 中文件被切分文多個(gè)數(shù)據(jù)塊(Block)存儲(chǔ)在多個(gè) DataNode 中巷帝,塊大小默認(rèn)為 128M,數(shù)據(jù)塊副本默認(rèn)為3驰徊。

NameNode 管理 HDFS 文件系統(tǒng)的元數(shù)據(jù)(Metadata)和控制客戶(hù)端(Client)對(duì)文件的訪問(wèn)請(qǐng)求堕阔。文件操作比如打開(kāi)超陆、關(guān)閉、重命名等都由 NameNode 執(zhí)行时呀,響應(yīng)操作記錄也存儲(chǔ)在其中谨娜。文件的數(shù)據(jù)塊副本數(shù)和對(duì)應(yīng)的 DataNode 地址也由 NameNode 維護(hù)存儲(chǔ)。

DataNode 管理相應(yīng)節(jié)點(diǎn)的存儲(chǔ)漠畜,響應(yīng) NameNode 命令坞靶,讀寫(xiě)用戶(hù)的文件對(duì)應(yīng)的數(shù)據(jù)塊,定期向 NameNode 發(fā)送心跳信息躯喇,匯報(bào)本身及其所有 block 信息、健康狀況倦微。

數(shù)據(jù)副本存放

塊副本

上圖展示了 HDFS 數(shù)據(jù)副本存放的示意欣福。從 NameNode 的元數(shù)據(jù)信息中可以看到焦履,對(duì)于文件 part-0 ,其副本份數(shù)是 2郑临,block ID 分別為 1 和 3屑宠。其中 block1 存放在 DataNode1 和 DataNode3 中,這樣即使某個(gè) DataNode 宕機(jī)躺翻,也不會(huì)影響文件的訪問(wèn)卫玖。

HDFS 數(shù)據(jù)塊分布在不同的 DataNode 上假瞬,所以文件系統(tǒng)可以并行地進(jìn)行讀寫(xiě)操作,實(shí)現(xiàn)告訴訪問(wèn)剪芥。

大型的 HDFS 集群往往有多個(gè)機(jī)架芦劣。當(dāng)副本個(gè)數(shù)為 3 時(shí)说榆,往數(shù)據(jù)塊副本存放策略是一個(gè)當(dāng)前運(yùn)行客戶(hù)端的節(jié)點(diǎn)上签财,另外兩個(gè)副本放在其它機(jī)架的不同節(jié)點(diǎn)上,從而保證數(shù)據(jù)的可靠性和讀寫(xiě)性能唱蒸。

以上就是 HDFS 的基本存儲(chǔ)原理。

HDFS 高可用 (High Availability庆捺,HA)

NameNode 節(jié)點(diǎn)中存儲(chǔ)有以下兩個(gè)文件滔以,存儲(chǔ)重要的元數(shù)據(jù)信息。

  • fsimage: NameNode 的快照抵碟,元數(shù)據(jù)的鏡像坏匪,包含了文件系統(tǒng)中的所有目錄和文件inode的序列化信息

  • edits: 記錄文件系統(tǒng)的改動(dòng)

NameNode 把對(duì)文件系統(tǒng)的修改存儲(chǔ)到 edits 中,啟動(dòng)時(shí)從 fsimage 讀取文件狀態(tài)敦迄,從 edits 應(yīng)用編輯操作粒竖,隨著 edits 越來(lái)越大蕊苗,NameNode 的啟動(dòng)時(shí)間會(huì)變長(zhǎng)。

在 Hadoop 2.X 之前有 Secondary NameNode尖滚,按一定規(guī)則將 edits 文件和 fsimage 文件合并瞧柔,合并后 NameNode 會(huì)啟用新的 edits 文件,這樣會(huì)減小 edits 文件的文件大小撼唾,控制 edits 文件的大小會(huì)減少 NameNode 在啟動(dòng)階段解析加載 edits 文件的時(shí)長(zhǎng)哥蔚。

但是糙箍,在 hadoop2.0 之前,NameNode 只有一個(gè)抖格,存在單點(diǎn)問(wèn)題(雖然 Hadoop1.0 有secondary NameNode,checkpointnode收奔,buckcupnode 這些办桨,但是單點(diǎn)問(wèn)題依然存在),在 hadoop2.0 引入了 HA 機(jī)制损姜。

Hadoop 2.X 引入 Active NameNode 和 Standby NameNode 摧阅,提供主備切換避免單點(diǎn)故障绷蹲。HA 其本質(zhì)上就是要保證主備 NN 元數(shù)據(jù)一致,即保證 fsimage 和 edits 在備 NN 上也是完整的比规。元數(shù)據(jù)的同步很大程度取決于 edits 的同步拦英,而這步驟的關(guān)鍵就是共享文件系統(tǒng)疤估。提供兩種方式。

NFS 網(wǎng)絡(luò)共享文件系統(tǒng)的方式

提供共享文件的 NAS 設(shè)備钞瀑。NFS 作為 Active NameNode 和 Standby NameNode 之間數(shù)據(jù)共享的存儲(chǔ)慷荔。Active NameNode 會(huì)把最近的 edits 文件寫(xiě)到 NFS,而 Standby NameNode 從 NFS 中把數(shù)據(jù)讀過(guò)來(lái)贷岸。這個(gè)方式的缺點(diǎn)是吧碾,如果 Active NameNode 或者 Standby NameNode 有一個(gè)和 NFS 之間網(wǎng)絡(luò)有問(wèn)題墓卦,則會(huì)造成他們之前數(shù)據(jù)的同步出問(wèn)題。

QJM(Quorum Journal Manager )方式

QJM 由JournalNode(JN)組成睁本,一般是奇數(shù)點(diǎn)結(jié)點(diǎn)組成。每個(gè) JournalNode 對(duì)外有一個(gè)簡(jiǎn)易的 RPC 接口抄瑟,以供 NameNode 讀寫(xiě) edits 到 JN 本地磁盤(pán)枉疼。當(dāng)寫(xiě) edits 時(shí)骂维,NameNode 會(huì)同時(shí)向所有 JournalNode 并行寫(xiě)文件,只要有 N/2+1 結(jié)點(diǎn)寫(xiě)成功則認(rèn)為此次寫(xiě)操作成功褪测,遵循 Paxos 協(xié)議潦刃。

JN日志節(jié)點(diǎn)是一個(gè)輕量級(jí)的乖杠,所以可以和Hadoop的其他守護(hù)線(xiàn)程放在一起,不需要額外設(shè)備笆包。

完成 HA 除了元數(shù)據(jù)的同步略荡,還需要一個(gè)完善的主備選舉切換機(jī)制汛兜,依賴(lài)于 Zookeeper。

關(guān)于 HA 詳細(xì)內(nèi)容可參考

HDFS 聯(lián)邦(Federation)

如下圖 HDFS 有兩個(gè)重要層級(jí)肛根,命名空間(Namespace)和 塊存儲(chǔ)服務(wù)(Block Storage)漏策。但是之前介紹的 HDFS 結(jié)構(gòu)都是單 NameNode 的(注意上文說(shuō)得 HA 并不提供 Namespace 的擴(kuò)展)掺喻,單 NameNode 命名空間受限储矩,整個(gè) HDFS 文件系統(tǒng)的吞吐量受限于單個(gè) NameNode 的吞吐量褂乍,比如存儲(chǔ)大量小文件時(shí)逃片,NameNode 會(huì)越來(lái)越大,并且單個(gè) NameNode 無(wú)法隔離應(yīng)用程序呀狼。

HDFS 層級(jí)

聯(lián)邦 HDFS 提供了擴(kuò)展命名空間的策略赠潦,如下圖所示草冈。

HDFS 聯(lián)邦

塊池(Block Pool)

一個(gè)塊池是一系列屬于單個(gè)命名空間的塊集合怎棱,DataNodes 為集群中的所有塊池存儲(chǔ)塊。每個(gè)塊池都是獨(dú)立管理凡资。這就允許命名空間為新塊生成 Block IDs 時(shí)不需要與其他命名空間協(xié)調(diào)谬运。一個(gè) NameNode 故障不會(huì)阻止 DataNode 為集群中的其他 NameNodes 提供服務(wù)梆暖。

一個(gè)命名空間和它的塊池一起被稱(chēng)為命名空間卷(Namespace Volume)。命名空間卷是一個(gè)獨(dú)立的自我管理單位厚掷。當(dāng)一個(gè) NameNode/namespace 被刪除時(shí)级解,對(duì)應(yīng)的在 DataNodes 上的塊池也會(huì)被刪除勤哗。在集群升級(jí)期間,每個(gè)命名空間卷作為一個(gè)單元來(lái)進(jìn)行升級(jí)冬竟。

ClusterID

ClusterID 用于標(biāo)識(shí)集群中所有的節(jié)點(diǎn)。當(dāng)一個(gè) NameNode 被格式化時(shí),ClusterID 就會(huì)人工提供或者自動(dòng)生成袋狞,同時(shí)這個(gè) ID 用于將剩余其他 NameNode 格式化到集群中映屋。

HDFS 聯(lián)邦的主要好處:

  1. 命名空間可擴(kuò)展 - 聯(lián)邦增加了命名空間的水平擴(kuò)展性棚点。大型部署或使用大量小文件的部署使用命名空間擴(kuò)展可以允許將更多 NameNodes 添加到集群中,這對(duì)于大型部署或使用大量小文件部署是非常有益的(這樣就能避免單 個(gè)NameNode 內(nèi)存有限的問(wèn)題)砌梆。

  2. 性能 - 文件系統(tǒng)吞吐量將不受單個(gè)名稱(chēng)節(jié)點(diǎn)的限制贬循。向集群添加更多NameNode可擴(kuò)展文件系統(tǒng)讀/寫(xiě)的吞吐量杖虾。

  3. 隔離 - 單個(gè) NameNode 在多用戶(hù)環(huán)境中不提供隔離。例如坟比,一個(gè)實(shí)驗(yàn)應(yīng)用程序可能會(huì)使 NameNode 過(guò)載嚷往,并降低主要應(yīng)用程序的速度皮仁。通過(guò)使用多個(gè) NameNode,可以將不同類(lèi)別的應(yīng)用程序和用戶(hù)隔離到不同的命名空間巩割。

以上便是本文的全部?jī)?nèi)容付燥,關(guān)于 HDFS 的文件讀寫(xiě)键科,容錯(cuò)等內(nèi)容會(huì)在下一篇文章通過(guò)漫畫(huà)的形式介紹漩怎。

參考文獻(xiàn)

歡迎關(guān)注的我微信公眾號(hào)

微信公眾號(hào)

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市叁执,隨后出現(xiàn)的幾起案子矮冬,更是在濱河造成了極大的恐慌,老刑警劉巖吆录,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恢筝,死亡現(xiàn)場(chǎng)離奇詭異巨坊,居然都是意外死亡抱究,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妈候,“玉大人苦银,你說(shuō)我怎么就攤上這事》哪睿” “怎么了想括?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)渣窜。 經(jīng)常有香客問(wèn)我宪躯,道長(zhǎng)访雪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮肝陪,結(jié)果婚禮上刑顺,老公的妹妹穿的比我還像新娘蹲堂。我一直安慰自己,他們只是感情好政供,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布布隔。 她就那樣靜靜地躺著稼虎,像睡著了一般霎俩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上打却,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天淘衙,我揣著相機(jī)與錄音腻暮,去河邊找鬼毯侦。 笑死侈离,一個(gè)胖子當(dāng)著我的面吹牛筝蚕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洲胖,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绿映,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了腐晾?” 一聲冷哼從身側(cè)響起叉弦,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藻糖,沒(méi)想到半個(gè)月后淹冰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巨柒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年樱拴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洋满。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖芦岂,靈堂內(nèi)的尸體忽然破棺而出瘪弓,到底是詐尸還是另有隱情,我是刑警寧澤禽最,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布腺怯,位于F島的核電站,受9級(jí)特大地震影響川无,放射性物質(zhì)發(fā)生泄漏呛占。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一懦趋、第九天 我趴在偏房一處隱蔽的房頂上張望晾虑。 院中可真熱鬧,春花似錦、人聲如沸帜篇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)笙隙。三九已至洪灯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竟痰,已是汗流浹背签钩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坏快,地道東北人铅檩。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像莽鸿,于是被迫代替她去往敵國(guó)和親昧旨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

  • HDFS是Hadoop Distribute File System 的簡(jiǎn)稱(chēng)富拗,也就是Hadoop的一個(gè)分布式文件系...
    大佛愛(ài)讀書(shū)閱讀 871評(píng)論 0 0
  • 今天是星期一是我們班實(shí)行積分制管理的第一天臼予,早晨一起床我就告訴兒子你們班也要開(kāi)始加分制了鸣戴,一共分了48條你...
    三一馬勝文爸爸閱讀 257評(píng)論 0 0
  • 變成一只蟬并非易事 首先我沒(méi)有透明的蟬翼 其次我沒(méi)有輾轉(zhuǎn)為土的涅槃 最重要的是此時(shí)我不比一只蟬快樂(lè) 這時(shí)蟬聲還是高...
    茱萸茱萸閱讀 289評(píng)論 2 1