HADOOP大數(shù)據(jù)之HDFS架構(gòu)原理

HDFS架構(gòu)圖

  • HDFS集群遵循主從架構(gòu)( master/slave )燎窘。通常包括一個(gè)主節(jié)點(diǎn)和多個(gè)從節(jié)點(diǎn)摹闽。
  • 在內(nèi)部,文件分塊存儲(chǔ)褐健,每個(gè)塊根據(jù)復(fù)制因子存儲(chǔ)在不同的從節(jié)點(diǎn)計(jì)算機(jī)上形成備份付鹿。
  • 主節(jié)點(diǎn)存儲(chǔ)和管理文件系統(tǒng)namespace,即有關(guān)文件塊的信息,例如塊位置舵匾,權(quán)限等﹔從節(jié)點(diǎn)存儲(chǔ)文件的數(shù)據(jù)塊俊抵。
  • 主從各司其職,互相配合纽匙,共同對(duì)外提供分布式文件存儲(chǔ)服務(wù)务蝠。當(dāng)然內(nèi)部細(xì)節(jié)對(duì)于用戶來說是透明的拍谐。
HDFS Architecture

NameNode

主角色: namenode

  • NameNode是Hadoop分布式文件系統(tǒng)的核心烛缔,架構(gòu)中的主角色。
  • NameNode維護(hù)和管理文件系統(tǒng)元數(shù)據(jù)轩拨,包括名稱空間目錄樹結(jié)構(gòu)践瓷、文件和塊的位置信息、訪問權(quán)限等信息亡蓉。
  • 基于此晕翠,NameNode成為了訪問HDFS的唯一入口。
  • NameNode內(nèi)部通過內(nèi)存和磁盤文件兩種方式管理元數(shù)據(jù)砍濒。
  • 其中磁盤上的元數(shù)據(jù)文件包括Fsimage內(nèi)存元數(shù)據(jù)鏡像文件和edits log ( Journal )編輯日志淋肾。
  • 在Hadoop2之前,NameNode是單點(diǎn)故障爸邢。Hadoop 2中引入的高可用性樊卓。Hadoop群集體系結(jié)構(gòu)允許在群集中以熱備配
    置運(yùn)行兩個(gè)或多個(gè)NameNode。
NameNode

DataNode

從角色: datanode

  • DataNode是Hadoop HDFS中的從角色杠河,\color{red}{負(fù)責(zé)具體的數(shù)據(jù)塊存儲(chǔ)碌尔。}
  • DataNode的數(shù)量決定了HDFS集群的整體數(shù)據(jù)存儲(chǔ)能力。通過和NameNode配合維護(hù)著數(shù)據(jù)塊券敌。

Secondarynamenode

主角色輔助角色: secondarynamenode

  • 除了DataNode和NameNode之外唾戚,還有另一個(gè)守護(hù)進(jìn)程,它稱為secondary NameNode待诅。充當(dāng)NameNode的輔助節(jié)點(diǎn)叹坦,但不能替代NameNode。
  • 當(dāng)NameNode啟動(dòng)時(shí)卑雁,NameNode合并Fsimage和edits log文件以還原當(dāng)前文件系統(tǒng)名稱空間募书。如果edits log過大不利于加載,\color{red}{Secondary NameNode就輔助NameNode從NameNode下載Fsimage文件和edits log文件進(jìn)行合并序厉。}

HDFS重要特性

  1. 主從架構(gòu):(Namenode是HDFS主節(jié)點(diǎn)锐膜,Datanode是HDFS從節(jié)點(diǎn))。
  2. 分塊存儲(chǔ)機(jī)制:HDFS中的文件在物理上是分塊存儲(chǔ)( block )的}弛房,塊的大小可以通過配置參數(shù)來規(guī)定道盏,參數(shù)位于hdfs-default.xml中: dfs.blocksize。\color{red}{默認(rèn)大小是128M ( 134217728 )}$。
  3. 副本機(jī)制:所有block都會(huì)有副本荷逞,每個(gè)文件的block大小 ( dfs.blocksize )和副本系數(shù)(dfs.replication )媒咳,默認(rèn)dfs.replication的值是3,也就是會(huì)額外再復(fù)制2份种远,連同本身總共3份副本涩澡。
  4. namespace:層次性文件組織結(jié)構(gòu)(類windows)
  5. 元數(shù)據(jù):文件自身屬性信息、文件塊位置映射信息
  6. 數(shù)據(jù)塊存儲(chǔ):文件的各個(gè)block的具體存儲(chǔ)管理由DataNode節(jié)點(diǎn)承擔(dān)坠敷。

HDFS Web Interfes

  1. 模塊功能解讀-Utilities
    logs:各個(gè)datanode上的日志
    Configuration:查看配置文件是否生效
    Borwse the file system: 查看整個(gè)文件系統(tǒng)

HDFS寫數(shù)據(jù)流程

核心概念--Pipeline管道
  • Pipeline妙同,中文翻譯為管道。這是HDFS在上傳文件寫數(shù)據(jù)過程中采用的一種數(shù)據(jù)傳輸方式膝迎。

  • 客戶端將數(shù)據(jù)塊寫入第一個(gè)數(shù)據(jù)節(jié)點(diǎn)粥帚,第一個(gè)數(shù)據(jù)節(jié)點(diǎn)保存數(shù)據(jù)之后再將塊復(fù)制到第二個(gè)數(shù)據(jù)節(jié)點(diǎn),后者保存后將其復(fù)制到第三個(gè)數(shù)據(jù)節(jié)點(diǎn)限次。

  • 為什么datanode之間采用pipeline線性傳輸芒涡,而不是一次給三個(gè)datanode拓?fù)涫絺鬏斈?
    因?yàn)閿?shù)據(jù)以管道的方式,順序的沿著一個(gè)方向傳輸卖漫,這樣能夠充分利用每個(gè)機(jī)器的帶寬费尽,避免網(wǎng)絡(luò)瓶頸和高延遲時(shí)的連接,最小化推送所有數(shù)據(jù)的延時(shí)羊始。在線性推送模式下旱幼,每臺(tái)機(jī)器所有的出口寬帶都用于以最快的速度傳輸數(shù)據(jù),而不是在多個(gè)接受者之間分配寬帶店枣。lb

ACK應(yīng)答響應(yīng)
核心概念--默認(rèn)3副本存儲(chǔ)策略

默認(rèn)副本存儲(chǔ)策略是由\color{red}{BlockPlacementPolicyDefault}指定速警。
第一塊副本∶優(yōu)先客戶端本地,否則隨機(jī)
第二塊副本∶不同于第一塊副本的不同機(jī)架鸯两。
第三塊副本:第二塊副本相同機(jī)架不同機(jī)器闷旧。

HDFS默認(rèn)副本存儲(chǔ)策略示意圖.jpg

hdfs寫入數(shù)據(jù)流程
Data-Write-Mechanism-in-HDFS.gif
  1. Client 發(fā)起文件上傳請求(HDFS客戶端創(chuàng)建FileSystem對(duì)象實(shí)例DistributedFileSystem,F(xiàn)ileSystem封裝了與文件系統(tǒng)操作的相關(guān)方法钧唐。
    )忙灼,通過 RPC 與 NameNode 建立通訊, NameNode 檢查目標(biāo)文件是否已存在,父目錄是否存在钝侠,返回是否可以上傳该园;
  2. Client 請求第一個(gè) block 該傳輸?shù)侥男?DataNode 服務(wù)器上;
  3. NameNode 根據(jù)配置文件中指定的備份數(shù)量及機(jī)架感知原理進(jìn)行文件分配, 返回可用的 DataNode 的地址如:A, B, C帅韧;
    Hadoop 在設(shè)計(jì)時(shí)考慮到數(shù)據(jù)的安全與高效里初, 數(shù)據(jù)文件默認(rèn)在 HDFS 上存放三份, 存儲(chǔ)策略為本地一份忽舟,同機(jī)架內(nèi)其它某一節(jié)點(diǎn)上一份双妨,不同機(jī)架的某一節(jié)點(diǎn)上一份淮阐。
  4. Client 請求 3 臺(tái) DataNode 中的一臺(tái) A 上傳數(shù)據(jù)(本質(zhì)上是一個(gè) RPC 調(diào)用,建立 pipeline )刁品,A 收到請求會(huì)繼續(xù)調(diào)用 B泣特,然后 B 調(diào)用 C哈恰,將整個(gè) pipeline 建立完成椭员, 后逐級(jí)返回 client;
  5. Client 開始往 A 上傳第一個(gè) block(先從磁盤讀取數(shù)據(jù)放到一個(gè)本地內(nèi)存緩存)欧漱,以 packet 為單位(默認(rèn)64K)兜挨,A 收到一個(gè) packet 就會(huì)傳給 B膏孟,B 傳給 C。A 每傳一個(gè) packet 會(huì)放入一個(gè)應(yīng)答隊(duì)列等待應(yīng)答暑劝;
  6. 數(shù)據(jù)被分割成一個(gè)個(gè) packet 數(shù)據(jù)包在 pipeline 上依次傳輸骆莹,在 pipeline 反方向上颗搂, 逐個(gè)發(fā)送 ack(命令正確應(yīng)答)担猛,最終由 pipeline 中第一個(gè) DataNode 節(jié)點(diǎn) A 將 pipelineack 發(fā)送給 Client;
  7. 當(dāng)一個(gè) block 傳輸完成之后丢氢,Client 再次請求 NameNode 上傳第二個(gè) block傅联,重復(fù)步驟 2;
hdfs讀數(shù)據(jù)流程
Data-Read-Mechanism-in-HDFS.gif

1疚察、HDFS客戶端創(chuàng)建FileSystem對(duì)象實(shí)例DistributedFileSystem蒸走,F(xiàn)ileSystem封裝了與文件系統(tǒng)操作的相關(guān)方法。調(diào)用DistributedFileSystem對(duì)象的open()方法來打開希望讀取的文件貌嫡。
2比驻、DistributedFileSystem使用RPC調(diào)用namenode來確定文件中前幾個(gè)塊的塊位置(分批次讀取)信息岛抄。
對(duì)于每個(gè)塊别惦,namenode返回具有該塊所有副本的datanode位置地址列表,并且該地址列表是排序好的夫椭,與客戶端的網(wǎng)絡(luò)`拓?fù)渚嚯x近的排序靠前掸掸。
3、DistributedFileSystem將FSDataInputStream輸入流返回到客戶端以供其讀取數(shù)據(jù)蹭秋。FSDataInputStream類是DFSInputStream類的包裝扰付。
4、客戶端在FSDataInputStream輸入流上調(diào)用read()方法仁讨。然后羽莺,已存儲(chǔ)DataNode地址的DFSInputStream連接到文件中第一個(gè)塊的最近的DataNode。數(shù)據(jù)從DataNode流回客戶端洞豁,結(jié)果客戶端可以在流上重復(fù)調(diào)用read ( )盐固。
5屠橄、當(dāng)該塊結(jié)束時(shí),DFSInputStream將關(guān)閉與DataNode的連接闰挡,然后尋找下一個(gè)塊的最佳datanode锐墙。這些操作對(duì)用戶來說是透明的。所以用戶感覺起來它一直在讀取一個(gè)連續(xù)的流长酗。
客戶端從流中讀取數(shù)據(jù)時(shí)溪北,也會(huì)根據(jù)需要詢問NameNode來檢索下一批數(shù)據(jù)塊的DataNode位置信息。
6夺脾、一旦客戶端完成讀取之拨,就對(duì)FSDataInputStream調(diào)用close()方法。

HDFS集群角色職責(zé)

NameNode職責(zé)
  • NameNode是HDFS的核心咧叭,集群的主角色蚀乔,被稱為Master。
  • NameNode僅存儲(chǔ)管理HDFS的元數(shù)據(jù)∶文件系統(tǒng)namespace操作維護(hù)目錄樹菲茬,文件和塊的位置信息吉挣。
  • NameNode不存儲(chǔ)實(shí)際數(shù)據(jù)或數(shù)據(jù)集。數(shù)據(jù)本身實(shí)際存儲(chǔ)在DataNodes中婉弹。
  • NameNode知道HDFS中任何給定文件的塊列表及其位置睬魂。使用此信息NameNode知道如何從塊中構(gòu)建文件。
  • NameNode并不持久化存儲(chǔ)每個(gè)文件中各個(gè)塊所在的DataNode的位置信息镀赌,這些信息會(huì)在系統(tǒng)啟動(dòng)時(shí)從DataNode匯報(bào)中重建氯哮。
  • NameNode對(duì)于HDFS至關(guān)重要,當(dāng)NameNode關(guān)閉時(shí)商佛,HDFS / Hadoop集群無法訪問喉钢。NameNode是Hadoop集群中的單點(diǎn)故障。
DataNode職責(zé)
  • DataNode負(fù)責(zé)將實(shí)際數(shù)據(jù)存儲(chǔ)在HDFS中良姆。是集群的從角色肠虽,被稱為Slave。
  • DataNode啟動(dòng)時(shí)歇盼,它將自己發(fā)布到NameNode并匯報(bào)自己負(fù)責(zé)持有的塊列表舔痕。根據(jù)NameNode的指令,執(zhí)行塊的創(chuàng)建豹缀、復(fù)制伯复、刪除操作。
  • DataNode會(huì)定期( df.s..heartbeat..ntecxal配置項(xiàng)配置邢笙,默認(rèn)是3秒)向NameNode發(fā)送心跳啸如,如果NameNode長時(shí)間沒有接受到
  • DataNode發(fā)送的心跳,NameNode就會(huì)認(rèn)為該DataNode失效氮惯。
  • DataNode會(huì)定期向NameNode進(jìn)行自己持有的數(shù)據(jù)塊信息匯報(bào)叮雳,匯報(bào)時(shí)間間隔取參數(shù)dfs..blockrepoxt..intervalMsec,參數(shù)未配置的話默認(rèn)為6小時(shí).
  • DataNode所在機(jī)器通常配置有大量的硬盤空間想暗。因?yàn)閷?shí)際數(shù)據(jù)存儲(chǔ)在DataNode中。

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

元數(shù)據(jù)管理概述
按存儲(chǔ)形式分為\color{red}{內(nèi)存元數(shù)據(jù)}\color{red}{元數(shù)據(jù)文件}兩種帘不,分別存在內(nèi)存和磁盤上说莫。

  1. 內(nèi)存元數(shù)據(jù)
    為了保證用戶操作元數(shù)據(jù)交互高效,延遲低) NameNode把所有的元數(shù)據(jù)都存儲(chǔ)在內(nèi)存中,我們叫做內(nèi)存元數(shù)據(jù)寞焙。內(nèi)存中的元數(shù)據(jù)是最完整的储狭,包括文件自身屬性信息、文件塊位置映射信息捣郊。
    但是內(nèi)存的致命問題是辽狈,斷點(diǎn)數(shù)據(jù)丟失,數(shù)據(jù)不會(huì)持久化呛牲,因此NameNode又輔佐了元數(shù)據(jù)文件來保證元數(shù)據(jù)的安全完整刮萌。
  2. 元數(shù)據(jù)文件有兩種:fsimage內(nèi)存鏡像文件、Edits log編輯日志娘扩。
    namenode元數(shù)據(jù)管理.jpg

    元數(shù)據(jù)本地存儲(chǔ)目錄:hdfs-site.xml配置文件中\color{red}{ \{dfs.namenode.dir\}/dfs/name}
SecondaryNameNode

主角色NameNode的輔助角色着茸,定期做edit logs和fsimage文件的合并,更新NameNode元數(shù)據(jù)的內(nèi)容畜侦,減小NameNode上的壓力元扔。
SecondaryNameNode Checkpoint流程


SecondaryNameNode Checkpoint流程
NameNode存儲(chǔ)多目錄

namenode元數(shù)據(jù)存儲(chǔ)目錄由參數(shù): dfs.namenode.name.dir指定。
\color{red}{ dfs. namenode. name. dir屬性可以配置多個(gè)目錄}旋膳,各個(gè)目錄存儲(chǔ)的文件結(jié)構(gòu)和內(nèi)容都完全一樣,相當(dāng)于備份途事,這樣做的好處是當(dāng)其中一個(gè)目錄損壞了验懊,也不會(huì)影響到hadoop的元數(shù)據(jù),特別是當(dāng)其中一個(gè)目錄是NFS(網(wǎng)絡(luò)文件系統(tǒng)Network File System尸变,NFS )之上义图,即使你這臺(tái)機(jī)器損壞了,元數(shù)據(jù)也得到保存召烂。

Hadoop Archive文件歸檔
  • Archive概述
    Hadoop Archives可以有效的處理以上問題碱工,它可以把多個(gè)文件歸檔成為一個(gè)文件,歸檔成一個(gè)文件后還可以透明的訪問每一個(gè)文件奏夫。
  • 查看Archive--查看歸檔之前的樣子
    在查看har文件的時(shí)候怕篷,如果沒有指定訪問協(xié)議,默認(rèn)使用的就是hdfs ://酗昼,此時(shí)所能看到的就是歸檔之后的樣子廊谓。此外,Archive還提供了自己的har uri訪問協(xié)議麻削。如果用har uri去訪問的話蒸痹,索引春弥、標(biāo)識(shí)等文件就會(huì)隱藏起來,只顯示創(chuàng)建檔案之前的原文件:
    Hadoop Archives的URI是︰
    har : / / scheme-hostname : port/archivepath/fileinarchivescheme-hostname格式為hdfs-域名:端口叠荠。
Sequence File序列化文件

Sequence File是Hadoop提供的一種二進(jìn)制文件存儲(chǔ)格式匿沛。
一條數(shù)據(jù)稱之為record (記錄),底層直接以<key榛鼎,value>鍵值對(duì)形式序列化到文件中俺祠。

  • 優(yōu)點(diǎn)
    二級(jí)制格式存儲(chǔ),比文本文件更緊湊借帘。
    支持不同級(jí)別壓縮(基于Record或Block壓縮)蜘渣。文件可以拆分和并行處理,適用于MapReduce程序肺然。
  • 局限性
    二進(jìn)制格式文件不方便查看蔫缸。
    特定于hadoop,只有Java API可用于與之進(jìn)行交互际起。尚未提供多語言支持拾碌。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市街望,隨后出現(xiàn)的幾起案子校翔,更是在濱河造成了極大的恐慌,老刑警劉巖灾前,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件防症,死亡現(xiàn)場離奇詭異,居然都是意外死亡哎甲,警方通過查閱死者的電腦和手機(jī)蔫敲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炭玫,“玉大人奈嘿,你說我怎么就攤上這事⊥碳樱” “怎么了裙犹?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長衔憨。 經(jīng)常有香客問我叶圃,道長,這世上最難降的妖魔是什么巫财? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任盗似,我火速辦了婚禮,結(jié)果婚禮上平项,老公的妹妹穿的比我還像新娘赫舒。我一直安慰自己悍及,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布接癌。 她就那樣靜靜地躺著心赶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缺猛。 梳的紋絲不亂的頭發(fā)上缨叫,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音荔燎,去河邊找鬼耻姥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛有咨,可吹牛的內(nèi)容都是我干的琐簇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼座享,長吁一口氣:“原來是場噩夢啊……” “哼婉商!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起渣叛,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤丈秩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后淳衙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蘑秽,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年滤祖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了筷狼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匠童,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出塑顺,到底是詐尸還是另有隱情汤求,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布严拒,位于F島的核電站扬绪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏裤唠。R本人自食惡果不足惜挤牛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望种蘸。 院中可真熱鬧墓赴,春花似錦竞膳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至章办,卻和暖如春锉走,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藕届。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工挪蹭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人休偶。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓梁厉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親椅贱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子懂算,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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