站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        快速了解HDFS、NameNode和DataNode

        概覽

        首先我們來(lái)認(rèn)識(shí)一下HDFS, HDFS(Hadoop Distributed File System )Hadoop分布式文件系統(tǒng)。它其實(shí)是將一個(gè)大文件分成若干塊保存在不同服務(wù)器的多個(gè)節(jié)點(diǎn)中。通過(guò)聯(lián)網(wǎng)讓用戶感覺(jué)像是在本地一樣查看文件,為了降低文件丟失造成的錯(cuò)誤,它會(huì)為每個(gè)小文件復(fù)制多個(gè)副本(默認(rèn)為三個(gè)),以此來(lái)實(shí)現(xiàn)多機(jī)器上的多用戶分享文件和存儲(chǔ)空間。

        HDFS特點(diǎn):

        ① 保存多個(gè)副本,且提供容錯(cuò)機(jī)制,副本丟失或宕機(jī)自動(dòng)恢復(fù)。默認(rèn)存3份。

        ② 運(yùn)行在廉價(jià)的機(jī)器上。

        ③ 適合大數(shù)據(jù)的處理。因?yàn)樾∥募舱加靡粋€(gè)塊,小文件越多(1000個(gè)1k文件)塊越 多,NameNode壓力越大。

        如:將一個(gè)大文件分成三塊A、B、C的存儲(chǔ)方式

        PS:數(shù)據(jù)復(fù)制原則:

        除了最后一個(gè)塊之外的文件中的所有塊都是相同的大小。

        HDFS的放置策略:

        是將一個(gè)副本放在本地機(jī)架中的一個(gè)節(jié)點(diǎn)上,另一個(gè)位于不同(遠(yuǎn)程)機(jī)架中的節(jié)點(diǎn)上,而最后一個(gè)位于不同節(jié)點(diǎn)上遠(yuǎn)程機(jī)架。

        涉及到的屬性:

        塊大小:Hadoop1版本里默認(rèn)為64M,Hadoop2版本里默認(rèn)為128M

        復(fù)制因子:每個(gè)文件加上其文件副本的份數(shù)

        HDFS的基本結(jié)構(gòu)

         快速了解HDFS、NameNode和DataNode

        如上圖所示,HDFS基本結(jié)構(gòu)分NameNode、SecondaryNameNode、DataNode這幾個(gè)。

        NameNode:是Master節(jié)點(diǎn),有點(diǎn)類似Linux里的根目錄。管理數(shù)據(jù)塊映射;處理客戶端的讀寫請(qǐng)求;配置副本策略;管理HDFS的名稱空間;

        SecondaryNameNode:保存著NameNode的部分信息(不是全部信息NameNode宕掉之后恢復(fù)數(shù)據(jù)用),是NameNode的冷備份;合并fsimage和edits然后再發(fā)給namenode。(防止edits過(guò)大的一種解決方案)

        DataNode:負(fù)責(zé)存儲(chǔ)client發(fā)來(lái)的數(shù)據(jù)塊block;執(zhí)行數(shù)據(jù)塊的讀寫操作。是NameNode的小弟。

        熱備份:b是a的熱備份,如果a壞掉。那么b馬上運(yùn)行代替a的工作。

        冷備份:b是a的冷備份,如果a壞掉。那么b不能馬上代替a工作。但是b上存儲(chǔ)a的一些信息,減少a壞掉之后的損失。

        fsimage:元數(shù)據(jù)鏡像文件(文件系統(tǒng)的目錄樹。)

        edits:元數(shù)據(jù)的操作日志(針對(duì)文件系統(tǒng)做的修改操作記錄)

        namenode內(nèi)存中存儲(chǔ)的是=fsimage+edits。

        NameNode詳解

        作用:

        Namenode起一個(gè)統(tǒng)領(lǐng)的作用,用戶通過(guò)namenode來(lái)實(shí)現(xiàn)對(duì)其他數(shù)據(jù)的訪問(wèn)和操作,類似于root根目錄的感覺(jué)。

        Namenode包含:目錄與數(shù)據(jù)塊之間的關(guān)系(靠fsimage和edits來(lái)實(shí)現(xiàn)),數(shù)據(jù)塊和節(jié)點(diǎn)之間的關(guān)系

        fsimage文件與edits文件是Namenode結(jié)點(diǎn)上的核心文件。

        Namenode中僅僅存儲(chǔ)目錄樹信息,而關(guān)于BLOCK的位置信息則是從各個(gè)Datanode上傳到Namenode上的。

        Namenode的目錄樹信息就是物理的存儲(chǔ)在fsimage這個(gè)文件中的,當(dāng)Namenode啟動(dòng)的時(shí)候會(huì)首先讀取fsimage這個(gè)文件,將目錄樹信息裝載到內(nèi)存中。

        而edits存儲(chǔ)的是日志信息,在Namenode啟動(dòng)后所有對(duì)目錄結(jié)構(gòu)的增加,刪除,修改等操作都會(huì)記錄到edits文件中,并不會(huì)同步的記錄在fsimage中。

        而當(dāng)Namenode結(jié)點(diǎn)關(guān)閉的時(shí)候,也不會(huì)將fsimage與edits文件進(jìn)行合并,這個(gè)合并的過(guò)程實(shí)際上是發(fā)生在Namenode啟動(dòng)的過(guò)程中。

        也就是說(shuō),當(dāng)Namenode啟動(dòng)的時(shí)候,首先裝載fsimage文件,然后在應(yīng)用edits文件,最后還會(huì)將最新的目錄樹信息更新到新的fsimage文件中,然后啟用新的edits文件。

        整個(gè)流程是沒(méi)有問(wèn)題的,但是有個(gè)小瑕疵,就是如果Namenode在啟動(dòng)后發(fā)生的改變過(guò)多,會(huì)導(dǎo)致edits文件變得非常大,大得程度與Namenode的更新頻率有關(guān)系。

        那么在下一次Namenode啟動(dòng)的過(guò)程中,讀取了fsimage文件后,會(huì)應(yīng)用這個(gè)無(wú)比大的edits文件,導(dǎo)致啟動(dòng)時(shí)間變長(zhǎng),并且不可控,可能需要啟動(dòng)幾個(gè)小時(shí)也說(shuō)不定。

        Namenode的edits文件過(guò)大的問(wèn)題,也就是SecondeNamenode要解決的主要問(wèn)題。

        SecondNamenode會(huì)按照一定規(guī)則被喚醒,然后進(jìn)行fsimage文件與edits文件的合并,防止edits文件過(guò)大,導(dǎo)致Namenode啟動(dòng)時(shí)間過(guò)長(zhǎng)。

        DataNode詳解

        DataNode在HDFS中真正存儲(chǔ)數(shù)據(jù)。

        首先解釋塊(block)的概念:

        1. DataNode在存儲(chǔ)數(shù)據(jù)的時(shí)候是按照block為單位讀寫數(shù)據(jù)的。block是hdfs讀寫數(shù)據(jù)的基本單位。
        2. 假設(shè)文件大小是100GB,從字節(jié)位置0開始,每128MB字節(jié)劃分為一個(gè)block,依此類推,可以劃分出很多的block。每個(gè)block就是128MB大小。
        3. block本質(zhì)上是一個(gè) 邏輯概念,意味著block里面不會(huì)真正的存儲(chǔ)數(shù)據(jù),只是劃分文件的。
        4. block里也會(huì)存副本,副本優(yōu)點(diǎn)是安全,缺點(diǎn)是占空間

        SecondaryNode

        執(zhí)行過(guò)程:從NameNode上 下載元數(shù)據(jù)信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并將其推送到NameNode,同時(shí)重置NameNode的edits.

        工作原理(轉(zhuǎn)自“大牛筆記”的博客,由于實(shí)現(xiàn)是清晰,受益很大,在此不做改動(dòng))

        寫操作:

         快速了解HDFS、NameNode和DataNode

        有一個(gè)文件FileA,100M大小。Client將FileA寫入到HDFS上。

        HDFS按默認(rèn)配置。

        HDFS分布在三個(gè)機(jī)架上Rack1,Rack2,Rack3。

        a. Client將FileA按64M分塊。分成兩塊,block1和Block2;

        b. Client向nameNode發(fā)送寫數(shù)據(jù)請(qǐng)求,如圖藍(lán)色虛線①——>。

        c. NameNode節(jié)點(diǎn),記錄block信息。并返回可用的DataNode,如粉色虛線②———>。

            Block1: host2,host1,host3

            Block2: host7,host8,host4

            原理:

                NameNode具有RackAware機(jī)架感知功能,這個(gè)可以配置。

                若client為DataNode節(jié)點(diǎn),那存儲(chǔ)block時(shí),規(guī)則為:副本1,同client的節(jié)點(diǎn)上;副本2,不同機(jī)架節(jié)點(diǎn)上;副本3,同第二個(gè)副本機(jī)架的另一個(gè)節(jié)點(diǎn)上;其他副本隨機(jī)挑選。

                若client不為DataNode節(jié)點(diǎn),那存儲(chǔ)block時(shí),規(guī)則為:副本1,隨機(jī)選擇一個(gè)節(jié)點(diǎn)上;副本2,不同副本1,機(jī)架上;副本3,同副本2相同的另一個(gè)節(jié)點(diǎn)上;其他副本隨機(jī)挑選。

        d. client向DataNode發(fā)送block1;發(fā)送過(guò)程是以流式寫入。

            流式寫入過(guò)程,

                1>將64M的block1按64k的package劃分;

                2>然后將第一個(gè)package發(fā)送給host2;

                3>host2接收完后,將第一個(gè)package發(fā)送給host1,同時(shí)client想host2發(fā)送第二個(gè)package;

                4>host1接收完第一個(gè)package后,發(fā)送給host3,同時(shí)接收host2發(fā)來(lái)的第二個(gè)package。

                5>以此類推,如圖紅線實(shí)線所示,直到將block1發(fā)送完畢。

                6>host2,host1,host3向NameNode,host2向Client發(fā)送通知,說(shuō)“消息發(fā)送完了”。如圖粉紅顏色實(shí)線所示。

                7>client收到host2發(fā)來(lái)的消息后,向namenode發(fā)送消息,說(shuō)我寫完了。這樣就真完成了。如圖黃色粗實(shí)線

                8>發(fā)送完block1后,再向host7,host8,host4發(fā)送block2,如圖藍(lán)色實(shí)線所示。

                9>發(fā)送完block2后,host7,host8,host4向NameNode,host7向Client發(fā)送通知,如圖淺綠色實(shí)線所示。

                10>client向NameNode發(fā)送消息,說(shuō)我寫完了,如圖黃色粗實(shí)線。。。這樣就完畢了。

        分析,通過(guò)寫過(guò)程,我們可以了解到:

            寫1T文件,我們需要3T的存儲(chǔ),3T的網(wǎng)絡(luò)流量貸款。

            在執(zhí)行讀或?qū)懙倪^(guò)程中,NameNode和DataNode通過(guò)HeartBeat進(jìn)行保存通信,確定DataNode活著。如果發(fā)現(xiàn)DataNode死掉了,就將死掉的DataNode上的數(shù)據(jù),放到其他節(jié)點(diǎn)去。讀取時(shí),要讀其他節(jié)點(diǎn)去。

            掛掉一個(gè)節(jié)點(diǎn),沒(méi)關(guān)系,還有其他節(jié)點(diǎn)可以備份;甚至,掛掉某一個(gè)機(jī)架,也沒(méi)關(guān)系;其他機(jī)架上,也有備份。

        讀操作:

         快速了解HDFS、NameNode和DataNode

        讀操作就簡(jiǎn)單一些了,如圖所示,client要從datanode上,讀取FileA。而FileA由block1和block2組成。 

        那么,讀操作流程為:

        a. client向namenode發(fā)送讀請(qǐng)求。

        b. namenode查看Metadata信息,返回fileA的block的位置。

            block1:host2,host1,host3

            block2:host7,host8,host4

        c. block的位置是有先后順序的,先讀block1,再讀block2。而且block1去host2上讀取;然后block2,去host7上讀??;

        上面例子中,client位于機(jī)架外,那么如果client位于機(jī)架內(nèi)某個(gè)DataNode上,例如,client是host6。那么讀取的時(shí)候,遵循的規(guī)律是:

        優(yōu)選讀取本機(jī)架上的數(shù)據(jù)

        運(yùn)算和存儲(chǔ)在同一個(gè)服務(wù)器中,每一個(gè)服務(wù)器都可以是本地服務(wù)器

        補(bǔ)充

        元數(shù)據(jù)

        元數(shù)據(jù)被定義為:描述數(shù)據(jù)的數(shù)據(jù),對(duì)數(shù)據(jù)及信息資源的描述性信息。(類似于Linux中的i節(jié)點(diǎn))

        以 “blk_”開頭的文件就是 存儲(chǔ)數(shù)據(jù)的block。這里的命名是有規(guī)律的,除了block文件外,還有后 綴是“meta”的文件 ,這是block的源數(shù)據(jù)文件,存放一些元數(shù)據(jù)信息。

        數(shù)據(jù)復(fù)制

        NameNode做出關(guān)于塊復(fù)制的所有決定。它周期性地從集群中的每個(gè)DataNode接收到一個(gè)心跳和一個(gè)阻塞報(bào)告。收到心跳意味著DataNode正常運(yùn)行。Blockreport包含DataNode上所有塊的列表。

        使用HDFS dfs命令對(duì)文件進(jìn)行增刪改查操作 https://www.linuxidc.com/Linux/2018-08/153641.htm

        Hadoop集群間的HDFS文件拷貝  https://www.linuxidc.com/Linux/2017-09/146879.htm

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 精品人妻少妇一区二区三区| 成人午夜精品久久久久久久小说| 国产在线精品福利大全| 成人国产精品秘 果冻传媒在线 | 精品欧洲AV无码一区二区男男 | 国产成人亚洲精品91专区手机| 国产精品 猎奇 另类视频| 国内精品久久久久久久亚洲| 亚洲国产精品人人做人人爱| 亚洲国产精品无码专区| 国产福利91精品一区二区三区| 91大神精品全国在线观看| 欧美成人精品欧美一级乱黄码| 色婷婷在线精品国自产拍| 欧洲精品视频在线观看| 人妻少妇精品久久| 久久99国产精品99久久| 日韩精品人成在线播放| 999精品视频| 亚洲精品成人区在线观看| 久久91精品国产91久久户| 亚洲国产精品嫩草影院久久| 99RE8这里有精品热视频| 人妻AV一区二区三区精品| 国产精品成| 91视频国产精品| 日韩精品少妇无码受不了| 国产精品亚洲视频| 国产欧美亚洲精品A| 欧美激情视频精品一区二区| 午夜精品视频在线观看| 精品久久久噜噜噜久久久| 日韩精品一区二区三区在线观看 | 久久精品国产精品亚洲人人 | 自拍中文精品无码| 精品水蜜桃久久久久久久| 99re6在线视频精品免费| 亚洲欧美精品综合中文字幕| 国产精品推荐天天看天天爽| 色综合久久精品中文字幕首页| 激情亚洲一区国产精品|