1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        HDFS技術(shù)原理

        共 7122字,需瀏覽 15分鐘

         ·

        2021-06-03 19:30

        不點(diǎn)藍(lán)字,我們哪來(lái)故事?

        每天 11 點(diǎn)更新文章,餓了點(diǎn)外賣(mài),點(diǎn)擊 ??《無(wú)門(mén)檻外賣(mài)優(yōu)惠券,每天免費(fèi)領(lǐng)!》

        來(lái)源 | http://rrd.me/g6P3V
        HDFS概述及應(yīng)用場(chǎng)景

        HDFS概述:

        HDFS(Hadoop Distributed File System)基于Google發(fā)布的GFS論文設(shè)計(jì)開(kāi)發(fā),運(yùn)行在通用硬件平臺(tái)上的分布式文件系統(tǒng)。

        其除具有其他分布式文件系統(tǒng)的相同特性外,還有自己特有的特性:

        1. 高容錯(cuò)性:認(rèn)為硬件總是不可靠的。
        2. 高吞吐量:為大量數(shù)據(jù)訪(fǎng)問(wèn)的應(yīng)用提供高可用吞吐量支持。
        3. 大文件存儲(chǔ):支持存儲(chǔ)TB-PB級(jí)別的數(shù)據(jù)。

        HDFS適合做:大文件存儲(chǔ)、流式數(shù)據(jù)訪(fǎng)問(wèn)。

        HDFS不適合做:大量小文件、隨機(jī)寫(xiě)入、低延遲讀取。

        HDFS應(yīng)用場(chǎng)景舉例:

        HDFS是Hadoop技術(shù)框架中的分布式文件系統(tǒng),對(duì)部署在多臺(tái)獨(dú)立物理機(jī)器上的文件進(jìn)行管理。

        可應(yīng)用與以下幾種場(chǎng)景:

        1. 網(wǎng)站用戶(hù)行為數(shù)據(jù)存儲(chǔ)。
        2. 生態(tài)系統(tǒng)數(shù)據(jù)存儲(chǔ)。
        3. 氣象數(shù)據(jù)存儲(chǔ)。

        HDFS在FusionInsight產(chǎn)品的位置:

        HDFS位置

        圖:HDFS在FusionInsight產(chǎn)品中的位置

        FusionInsight HD 提供大數(shù)據(jù)處理環(huán)境,基于社區(qū)開(kāi)源軟件增強(qiáng),按照?qǐng)鼍斑x擇業(yè)界最佳實(shí)踐。

        HDFS作為Hadoop的基礎(chǔ)存儲(chǔ)設(shè)施,實(shí)現(xiàn)了一個(gè)分布式、高容錯(cuò)、可線(xiàn)性擴(kuò)展的文件系統(tǒng)。

        HDFS系統(tǒng)架構(gòu)

        系統(tǒng)設(shè)計(jì)目標(biāo):

        (1)硬件失效:

        • 硬件的異常比軟件的異常更加常見(jiàn)。
        • 對(duì)于有上百臺(tái)服務(wù)器的數(shù)據(jù)中心來(lái)說(shuō),認(rèn)為總有服務(wù)器異常,硬件異常是常態(tài)。
        • HDFS需要監(jiān)測(cè)這些異常,并自動(dòng)恢復(fù)數(shù)據(jù)。

        (2)流式數(shù)據(jù)訪(fǎng)問(wèn):

        • 基于HDFS的應(yīng)用僅采用流式方式讀數(shù)據(jù)。
        • 運(yùn)行在HDFS上的應(yīng)用并非以通用業(yè)務(wù)為目的的應(yīng)用程序。
        • 應(yīng)用程序關(guān)注的是吞吐量,而非響應(yīng)時(shí)間。
        • 非POSIX標(biāo)準(zhǔn)接口的數(shù)據(jù)訪(fǎng)問(wèn)。

        (3)存儲(chǔ)數(shù)據(jù)大:

        • 運(yùn)行在HDFS的應(yīng)用程序有較大的數(shù)據(jù)需要處理。
        • 典型的文件大小為GP到TB級(jí)別。

        (4)數(shù)據(jù)一致性:

        • 應(yīng)用程序采用WORM(Write Once Read Many)的數(shù)據(jù)讀寫(xiě)模型。
        • 文件僅支持追加,而不允許修改。

        (5)多硬件平臺(tái):

        • HDFS可運(yùn)行在不同的硬件平臺(tái)上。

        (6)移動(dòng)計(jì)算能力:

        • 計(jì)算和存儲(chǔ)能力采用就近原則,計(jì)算離數(shù)據(jù)最近。
        • 就近原則將有效減少網(wǎng)絡(luò)的負(fù)載,降低網(wǎng)絡(luò)擁塞。

        基本系統(tǒng)架構(gòu):

        HDFS架構(gòu)

        圖:HDFS系統(tǒng)架構(gòu)圖

        HDFS架構(gòu)包含三個(gè)部分:(NameNode,DateNode,Client)

        1. NameDode:用于存儲(chǔ)、生成文件系統(tǒng)的元數(shù)據(jù)、運(yùn)行一個(gè)實(shí)例。
        2. DateNode:用于存儲(chǔ)實(shí)際的數(shù)據(jù),將自己管理的數(shù)據(jù)塊上報(bào)給NameNode,運(yùn)行多個(gè)實(shí)例。
        3. Client:支持業(yè)務(wù)訪(fǎng)問(wèn)HDFS,從NameNode,DateNode獲取數(shù)據(jù)返回給業(yè)務(wù)。多個(gè)實(shí)例,和業(yè)務(wù)一起運(yùn)行。

        HDFS數(shù)據(jù)寫(xiě)入流程:

        HDFS寫(xiě)入流程

        圖:HDFS數(shù)據(jù)寫(xiě)入流程圖

        HDFS數(shù)據(jù)寫(xiě)入流程如下:

        1. 業(yè)務(wù)應(yīng)用調(diào)用HDFS Client提供的API創(chuàng)建文件,請(qǐng)求寫(xiě)入。
        2. HDFS Client聯(lián)系NameNode,NameNode在元數(shù)據(jù)中創(chuàng)建文件節(jié)點(diǎn)。
        3. 業(yè)務(wù)應(yīng)用調(diào)用write API寫(xiě)入文件。
        4. HDFS Client收到業(yè)務(wù)數(shù)據(jù)后,從NameNode獲取到數(shù)據(jù)塊編號(hào)、位置信息后,聯(lián)系DateNode,并將要寫(xiě)入數(shù)據(jù)的DateNode建立起流水線(xiàn)。完成后,客戶(hù)端再通過(guò)自有協(xié)議寫(xiě)入數(shù)據(jù)到DateNode1,再由DateNode1復(fù)制到NateNode2,DateNode3.
        5. 寫(xiě)完的數(shù)據(jù),將返回確認(rèn)信息給HDFS Client。
        6. 所有數(shù)據(jù)確認(rèn)完成后,業(yè)務(wù)調(diào)用HDFS CLient關(guān)閉文件。
        7. 業(yè)務(wù)調(diào)用close,flush后HDFS Client聯(lián)系NameNode,確認(rèn)數(shù)據(jù)寫(xiě)完成,NameNode持久化元數(shù)據(jù)。

        HDFS數(shù)據(jù)讀取流程:

        HDFS數(shù)據(jù)讀取

        圖:HDFS數(shù)據(jù)讀取流程圖

        HDFS數(shù)據(jù)讀取流程如下:

        1. 業(yè)務(wù)調(diào)用HDFS Client提供的API打開(kāi)文件。
        2. HDFS Client 聯(lián)系 NmaeNode,獲取到文件信息(數(shù)據(jù)塊、DateNode位置信息)。
        3. 業(yè)務(wù)應(yīng)用調(diào)用read API讀取文件。
        4. HDFS Client根據(jù)從NmaeNode獲取到的信息,聯(lián)系DateNode,獲取相應(yīng)的數(shù)據(jù)塊。(Client采用就近原則讀取數(shù)據(jù))。
        5. HDFS Client會(huì)與多個(gè)DateNode通訊獲取數(shù)據(jù)塊。
        6. 數(shù)據(jù)讀取完成后,業(yè)務(wù)調(diào)用close關(guān)閉連接。

        HDFS關(guān)鍵特性介紹

        HDFS架構(gòu)關(guān)鍵設(shè)計(jì):

        關(guān)鍵特性

        圖:HDFS架構(gòu)關(guān)鍵設(shè)計(jì)

        元數(shù)據(jù)持久化:

        元數(shù)據(jù)持久haul

        圖:元數(shù)據(jù)持久化流程圖

        元數(shù)據(jù)持久化流程如下:

        1. 備N(xiāo)maeNode通知主NameNode生成新的日志文件,以后的日志寫(xiě)到Editlog.new中,并獲取舊的Editlog。
        2. 備N(xiāo)ameNode從注NameNode上獲取FSImage文件及位于JournalNode上面的舊Editlog。
        3. 備N(xiāo)maeNode將日志和舊的元數(shù)據(jù)合并,生成新的元數(shù)據(jù)FSImage.ckpt。
        4. 備N(xiāo)ameNode將元數(shù)據(jù)上傳到主NameNode。
        5. 主NameNode將上傳的原書(shū)記進(jìn)行回滾。
        6. 循環(huán)步驟1.

        元數(shù)據(jù)持久化健壯機(jī)制:

        HDFS主要目的是保證存儲(chǔ)數(shù)據(jù)完整性,對(duì)于各組件的失效,做了可靠性處理。

        • 重建失效數(shù)據(jù)盤(pán)的副本數(shù)據(jù)

          DateNode向NmaeNode周期上報(bào)失敗時(shí),NmaeNode發(fā)起副本重建動(dòng)作以恢復(fù)丟失副本。

        • 集群數(shù)據(jù)均衡

          HDFS架構(gòu)設(shè)計(jì)了數(shù)據(jù)均衡機(jī)制,此機(jī)制保證數(shù)據(jù)在各個(gè)DateNode上分布式平均的。

        • 數(shù)據(jù)有效性保證

          DateNode數(shù)據(jù)在讀取時(shí)校驗(yàn)失敗,則從其他數(shù)據(jù)節(jié)點(diǎn)讀取數(shù)據(jù)。

        • 元數(shù)據(jù)可靠性保證

          采用日志機(jī)制操作元數(shù)據(jù),同時(shí)元數(shù)據(jù)存放在主備N(xiāo)ameNode上。

          快照機(jī)制實(shí)現(xiàn)了文件系統(tǒng)常見(jiàn)的快照機(jī)制,保證數(shù)據(jù)誤操作時(shí),能及時(shí)恢復(fù)。

        • 安全模式

          HDFS提供獨(dú)有的安全模式機(jī)制,在數(shù)據(jù)節(jié)點(diǎn)故障時(shí),能防止故障擴(kuò)散。

        HDFS高可靠性(HA):

        HDFS高可靠性

        圖;HDFS高可靠性原理

        HA解決的是一個(gè)熱備份的問(wèn)題。

        HDFS的高可靠性(HA)架構(gòu)在基本架構(gòu)上增加了一下組件:

        • ZooKeeper:分布式協(xié)調(diào),主要用來(lái)存儲(chǔ)HA下的狀態(tài)文件,主備信息、ZK個(gè)數(shù)建議3個(gè)及以上且為奇數(shù)個(gè)。
        • NmaeNode主備:NmaeNode主備模式,主提供服務(wù),備合并元數(shù)據(jù)并作為主的熱備。
        • ZKFC(Zookeeper Failover Controller)用于控制NmaeNode節(jié)點(diǎn)的主備狀態(tài)。
        • JN(JournalNode)日志節(jié)點(diǎn):用于共享存儲(chǔ)NmaeNode生成的Editlog。

        HA

        圖:HA原理

        處于待命狀態(tài)的名稱(chēng)節(jié)點(diǎn)和處于活狀態(tài)的名稱(chēng)節(jié)點(diǎn),它們?cè)獢?shù)據(jù)的兩個(gè)方面的信息是怎么同步的:

        處于待命狀態(tài)的名稱(chēng)節(jié)點(diǎn)當(dāng)中,它的兩方面元數(shù)據(jù),一個(gè)就是Editlog,它是通過(guò)共享存儲(chǔ)系統(tǒng)來(lái)獲得同步的,處于活躍狀態(tài)的名稱(chēng)節(jié)點(diǎn)已發(fā)生變化,馬上寫(xiě)入到共享存儲(chǔ)系統(tǒng),然后這共享存儲(chǔ)系統(tǒng)會(huì)通知待命的名稱(chēng)節(jié)點(diǎn)把它取走,這樣可以保證Editlog上兩者可以保持同步。對(duì)于映射表信息而言,也就是一個(gè)文件包含幾個(gè)塊,這些塊被保存到哪個(gè)數(shù)據(jù)節(jié)點(diǎn)上面。這種映射信息,它的 實(shí)時(shí)的維護(hù)是通過(guò)底層數(shù)據(jù)節(jié)點(diǎn),不斷同時(shí)向活躍名稱(chēng)節(jié)點(diǎn)和待命節(jié)點(diǎn)名稱(chēng)節(jié)點(diǎn)匯報(bào)來(lái)進(jìn)行維護(hù)的。這就是它的基本原理。

        HDFS聯(lián)邦(Federation):

        聯(lián)邦

        圖;HDFS聯(lián)邦

        HDFS Federation主要能夠解決,單名稱(chēng)節(jié)點(diǎn)中存在的以下問(wèn)題:

        1. HDFS集群的擴(kuò)展性問(wèn)題。

          有了多個(gè)名稱(chēng)節(jié)點(diǎn),每個(gè)名稱(chēng)節(jié)點(diǎn)都可以各自的去管理一部分目錄。管理自己對(duì)應(yīng)的子命名空間的子目錄,這樣就可以讓一個(gè)集群擴(kuò)展到更多節(jié)點(diǎn)。

          在HDFS1.0中會(huì)受到內(nèi)存的限制,制約文件存儲(chǔ)數(shù)目等限制。一個(gè)名稱(chēng)節(jié)點(diǎn)存儲(chǔ)的文件數(shù)目是有限的。

        2. 性能更高效

          多個(gè)名稱(chēng)節(jié)點(diǎn)各自都管理它不同的數(shù)據(jù),而且可以同時(shí)對(duì)外服務(wù),所以可以提供更高的數(shù)據(jù)的吞吐率。

        3. 良好的隔離性

          因?yàn)樗呀?jīng)根據(jù)不同業(yè)務(wù)數(shù)據(jù)要求,進(jìn)行了子空間的劃分,某種業(yè)務(wù)數(shù)據(jù)可能歸某個(gè)名稱(chēng)節(jié)點(diǎn)管理,另外一種業(yè)務(wù)數(shù)據(jù)屬于另外一個(gè)命名空間,歸另外一個(gè)名稱(chēng)節(jié)點(diǎn)管理。所以不同數(shù)據(jù)都分給不同名稱(chēng)節(jié)點(diǎn)去管理,這樣就可以有效地對(duì)不同應(yīng)用程序進(jìn)行隔離。不會(huì)導(dǎo)致一個(gè)應(yīng)用程序消耗過(guò)多資源,而影響另外一個(gè)應(yīng)用程序運(yùn)行的問(wèn)題。

        HDFS不能解決單點(diǎn)故障問(wèn)題。

        數(shù)據(jù)副本機(jī)制:

        數(shù)據(jù)副本機(jī)制

        圖:數(shù)據(jù)副本機(jī)制

        副本距離計(jì)算公式:

        • Distance(Rack1/D1,Rack1/D1)= 0 ,同一臺(tái)服務(wù)器的距離為0.
        • Distance (Rack1/D1, Rack1/D3) = 2;同一機(jī)架不同的服務(wù)器距離為2.
        • DIstance(Rack1/D1, Rack2/D1)= 4 ;不同機(jī)架的服務(wù)器距離為4.

        副本放置策略:

        1. 第一個(gè)副本在本地機(jī)器。
        2. 第二個(gè)副本在遠(yuǎn)端機(jī)架的節(jié)點(diǎn)。
        3. 第三個(gè)副本看之前連個(gè)副本是否在同一機(jī)架,如果是則選擇其他機(jī)架,否則選擇和第一個(gè)副本相同機(jī)架的不同節(jié)點(diǎn)。
        4. 第四個(gè)及以上,隨機(jī)選擇副本存放位置。

        配置HDFS數(shù)據(jù)存儲(chǔ)策略:

        默認(rèn)情況下,HDFS NmaeNode自動(dòng)選擇DateNode保存數(shù)據(jù)的副本。在實(shí)際義務(wù)中,存在以下場(chǎng)景:

        • DateNode上存在的不同存儲(chǔ)設(shè)備,數(shù)據(jù)需要選擇一個(gè)合適的設(shè)備分級(jí)存儲(chǔ)數(shù)據(jù)。
        • DateNode不同目錄中的數(shù)據(jù)重要程度不同,數(shù)據(jù)需要根據(jù)目錄標(biāo)簽選擇一個(gè)格式的DateNode節(jié)點(diǎn)保存。
        • DateNode集群使用了異構(gòu)服務(wù)器,關(guān)鍵數(shù)據(jù)需要保存在具有高度可靠性的節(jié)點(diǎn)組中。

        配置DateNode使用分級(jí)存儲(chǔ):

        • HDFS的分級(jí)存儲(chǔ)框架提供了RAM_DISK(內(nèi)存盤(pán))、DISK(機(jī)械硬盤(pán))、ARCHIVE(高密度低成本存儲(chǔ)介質(zhì))、SSD(固態(tài)硬盤(pán))四種存儲(chǔ)類(lèi)型的存儲(chǔ)設(shè)備。
        • 通過(guò)對(duì)四種存儲(chǔ)類(lèi)型進(jìn)行合理組合,即可形成使用與不公場(chǎng)景的存儲(chǔ)策略。

        存儲(chǔ)策略

        配置標(biāo)簽存儲(chǔ)策略:

        標(biāo)簽存儲(chǔ)

        圖;標(biāo)簽存儲(chǔ)策略

        配置DateNode使用標(biāo)簽存儲(chǔ):

        用戶(hù)通過(guò)數(shù)據(jù)特征靈活配置HDFS數(shù)據(jù)塊存放策略,即為一個(gè)HDFS目錄設(shè)置一個(gè)標(biāo)簽表達(dá)式,每個(gè)DateNode可以對(duì)應(yīng)一個(gè)或多個(gè)標(biāo)簽;當(dāng)基于標(biāo)簽的數(shù)據(jù)塊存放策略為指定目錄下的文件選擇DateNode節(jié)點(diǎn)進(jìn)行存放時(shí),根據(jù)文件的標(biāo)簽表達(dá)式選擇出將要存放的DateNode節(jié)點(diǎn)范圍,然后在這個(gè)DateNode節(jié)點(diǎn)范圍內(nèi),遵守下一個(gè)指定的數(shù)據(jù)塊存放策略進(jìn)行存放。

        配置DateNode使用節(jié)點(diǎn)組存儲(chǔ):

        節(jié)點(diǎn)組存儲(chǔ)

        圖:節(jié)點(diǎn)組存儲(chǔ)

        配置DateNode使用節(jié)點(diǎn)組存儲(chǔ):

        關(guān)鍵數(shù)據(jù)根據(jù)實(shí)際業(yè)務(wù)需要保存在具有高度可靠性的節(jié)點(diǎn)中,此時(shí)DateNode組成了異構(gòu)集群。通過(guò)修改DateNode的存儲(chǔ)策略,系統(tǒng)可以將數(shù)據(jù)強(qiáng)制保存在指定的節(jié)點(diǎn)組中。

        使用約束:

        1. 第一份副本將從強(qiáng)制機(jī)架組(機(jī)架組2)中選出,如果在強(qiáng)制機(jī)架組中沒(méi)用可用節(jié)點(diǎn),則寫(xiě)入失敗。
        2. 第二份副本將從本地客戶(hù)端機(jī)器或機(jī)架組中的隨機(jī)節(jié)點(diǎn)(當(dāng)客戶(hù)端機(jī)架組不為強(qiáng)制機(jī)架組時(shí))選出。
        3. 第三份副本將從其他機(jī)架組中選出。
        4. 各副本應(yīng)放在不同的機(jī)架組中。如果所需副本的數(shù)量大于可用的機(jī)架組數(shù)量,則會(huì)將多出的副本存放在隨機(jī)機(jī)架組中。

        Colocation同分布:

        同分布(Colocation)的定義:將存在關(guān)聯(lián)關(guān)系的數(shù)據(jù)或可能要進(jìn)行關(guān)聯(lián)操作的數(shù)據(jù)存儲(chǔ)在相同的存儲(chǔ)節(jié)點(diǎn)上。

        按照下圖存放,假設(shè)要將文件A和文件D進(jìn)行關(guān)聯(lián)操作,此時(shí)不可避免地要進(jìn)行大量的數(shù)據(jù)搬遷,整個(gè)集群將由于數(shù)據(jù)傳輸占用大量網(wǎng)絡(luò)帶寬,嚴(yán)重影響大數(shù)據(jù)的處理速度與系統(tǒng)性能。

        NN


        HDFS文件同分布的特性,將那些需要進(jìn)行關(guān)聯(lián)操作的文件存放在相同的數(shù)據(jù)節(jié)點(diǎn)上,在進(jìn)行關(guān)聯(lián)操作計(jì)算是避免了到其他數(shù)據(jù)節(jié)點(diǎn)上獲取數(shù)據(jù),大大降低了網(wǎng)絡(luò)帶寬的占用。

        使用同分布特性,文件A、D進(jìn)行join時(shí),由于其對(duì)應(yīng)的block都在相同的節(jié)點(diǎn),因此大大降低了資源消耗。如下圖:

        效果他

        圖:Colocation同分布效果圖

        HDFS架構(gòu)其他關(guān)鍵設(shè)計(jì)要點(diǎn)說(shuō)明:

        • 統(tǒng)一的文件系統(tǒng):

          HDFS對(duì)外僅呈現(xiàn)一個(gè)統(tǒng)一的文件系統(tǒng)。

        • 統(tǒng)一的通訊協(xié)議:

          統(tǒng)一采用RPC方式通信、NmaeNode被動(dòng)的接收Client,DateNode的RPC請(qǐng)求。

        • 空間回收機(jī)制:

          支持回收站機(jī)制,以及副本數(shù)的動(dòng)態(tài)設(shè)置機(jī)制。

        • 數(shù)據(jù)組織:

          數(shù)據(jù)存儲(chǔ)以數(shù)據(jù)塊為單位,存儲(chǔ)在操作系統(tǒng)的HDFS文件系統(tǒng)上。

        • 訪(fǎng)問(wèn)方式:

          提供Java API,http,shell方式訪(fǎng)問(wèn)HDFS數(shù)據(jù)。

        常用的shell命令:

        shell

        HDFS主要組件的功能

        NameNode和DateNode的對(duì)比:

        NameNodeDateNode

        存儲(chǔ)文件內(nèi)容

        文件內(nèi)容保存在磁盤(pán)
        保存文件,block,DateNode之間的映射關(guān)系維護(hù)了block id到datenode本地文件的映射關(guān)系。

        名稱(chēng)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu):

        • 在HDFS中,名稱(chēng)節(jié)點(diǎn)(NameNode)負(fù)責(zé)管理分布式文件系統(tǒng)的命名空間(Namespace),保存了兩個(gè)核心的數(shù)據(jù)結(jié)構(gòu),即FsImage和EditLog


          1. FsImage用于維護(hù)文件系統(tǒng)樹(shù)以及文件樹(shù)中所有的文件和文件夾的元數(shù)據(jù)
          2. 操作日志文件EditLog中記錄了所有針對(duì)文件的創(chuàng)建、刪除、重命名等操作
        • 名稱(chēng)節(jié)點(diǎn)記錄了每個(gè)文件中各個(gè)塊所在的數(shù)據(jù)節(jié)點(diǎn)的位置信息

        名稱(chēng)節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)

        圖:名稱(chēng)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)

        FsImage文件:

        FsImage文件包含文件系統(tǒng)中所有目錄和文件inode的序列化形式。每個(gè)inode是一個(gè)文件或目錄的元數(shù)據(jù)的內(nèi)部表示,并包含此類(lèi)信息:文件的復(fù)制等級(jí)、修改和訪(fǎng)問(wèn)時(shí)間、訪(fǎng)問(wèn)權(quán)限、塊大小以及組成文件的塊。對(duì)于目錄,則存儲(chǔ)修改時(shí)間、權(quán)限和配額元數(shù)據(jù).

        FsImage文件沒(méi)有記錄塊存儲(chǔ)在哪個(gè)數(shù)據(jù)節(jié)點(diǎn)。而是由名稱(chēng)節(jié)點(diǎn)把這些映射保留在內(nèi)存中,當(dāng)數(shù)據(jù)節(jié)點(diǎn)加入HDFS集群時(shí),數(shù)據(jù)節(jié)點(diǎn)會(huì)把自己所包含的塊列表告知給名稱(chēng)節(jié)點(diǎn),此后會(huì)定期執(zhí)行這種告知操作,以確保名稱(chēng)節(jié)點(diǎn)的塊映射是最新的。

        名稱(chēng)節(jié)點(diǎn)的啟動(dòng):
        • 在名稱(chēng)節(jié)點(diǎn)啟動(dòng)的時(shí)候,它會(huì)將FsImage文件中的內(nèi)容加載到內(nèi)存中,之后再執(zhí)行EditLog文件中的各項(xiàng)操作,使得內(nèi)存中的元數(shù)據(jù)和實(shí)際的同步,存在內(nèi)存中的元數(shù)據(jù)支持客戶(hù)端的讀操作。
        • 一旦在內(nèi)存中成功建立文件系統(tǒng)元數(shù)據(jù)的映射,則創(chuàng)建一個(gè)新的FsImage文件和一個(gè)空的EditLog文件。
        • 名稱(chēng)節(jié)點(diǎn)起來(lái)之后,HDFS中的更新操作會(huì)重新寫(xiě)到EditLog文件中,因?yàn)镕sImage文件一般都很大(GB級(jí)別的很常見(jiàn)),如果所有的更新操作都往FsImage文件中添加,這樣會(huì)導(dǎo)致系統(tǒng)運(yùn)行的十分緩慢,但是,如果往EditLog文件里面寫(xiě)就不會(huì)這樣,因?yàn)镋ditLog 要小很多。每次執(zhí)行寫(xiě)操作之后,且在向客戶(hù)端發(fā)送成功代碼之前,edits文件都需要同步更新。
        名稱(chēng)節(jié)點(diǎn)運(yùn)行期間Editlog不斷變大的問(wèn)題:
        • 在名稱(chēng)節(jié)點(diǎn)運(yùn)行期間,HDFS的所有更新操作都是直接寫(xiě)到EditLog中,久而久之, EditLog文件將會(huì)變得很大。
        • 雖然這對(duì)名稱(chēng)節(jié)點(diǎn)運(yùn)行時(shí)候是沒(méi)有什么明顯影響的,但是,當(dāng)名稱(chēng)節(jié)點(diǎn)重啟的時(shí)候,名稱(chēng)節(jié)點(diǎn)需要先將FsImage里面的所有內(nèi)容映像到內(nèi)存中,然后再一條一條地執(zhí)行EditLog中的記錄,當(dāng)EditLog文件非常大的時(shí)候,會(huì)導(dǎo)致名稱(chēng)節(jié)點(diǎn)啟動(dòng)操作非常慢,而在這段時(shí)間內(nèi)HDFS系統(tǒng)處于安全模式,一直無(wú)法對(duì)外提供寫(xiě)操作,影響了用戶(hù)的使用。

        如何解決?答案是:SecondaryNameNode第二名稱(chēng)節(jié)點(diǎn)

        第二名稱(chēng)節(jié)點(diǎn)是HDFS架構(gòu)中的一個(gè)組成部分,它是用來(lái)保存名稱(chēng)節(jié)點(diǎn)中對(duì)HDFS 元數(shù)據(jù)信息的備份,并減少名稱(chēng)節(jié)點(diǎn)重啟的時(shí)間。SecondaryNameNode一般是單獨(dú)運(yùn)行在一臺(tái)機(jī)器上。

        SecondaryNameNode的工作情況:

        (1)SecondaryNameNode會(huì)定期和NameNode通信,請(qǐng)求其停止使用EditLog文件,暫時(shí)將新的寫(xiě)操作寫(xiě)到一個(gè)新的文件edit.new上來(lái),這個(gè)操作是瞬間完成,上層寫(xiě)日志的函數(shù)完全感覺(jué)不到差別;

        (2)SecondaryNameNode通過(guò)HTTP GET方式從NameNode上獲取到FsImage和EditLog文件,并下載到本地的相應(yīng)目錄下;

        (3)SecondaryNameNode將下載下來(lái)的FsImage載入到內(nèi)存,然后一條一條地執(zhí)行EditLog文件中的各項(xiàng)更新操作,使得內(nèi)存中的FsImage保持最新;這個(gè)過(guò)程就是EditLog和FsImage文件合并;

        (4)SecondaryNameNode執(zhí)行完(3)操作之后,會(huì)通過(guò)post方式將新的FsImage文件發(fā)送到NameNode節(jié)點(diǎn)上 (5)NameNode將從SecondaryNameNode接收到的新的FsImage替換舊的FsImage文件,同時(shí)將edit.new替換EditLog文件,通過(guò)這個(gè)過(guò)程EditLog就變小了。

        數(shù)據(jù)節(jié)點(diǎn):

        • 數(shù)據(jù)節(jié)點(diǎn)是分布式文件系統(tǒng)HDFS的工作節(jié)點(diǎn),負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和讀取,會(huì)根據(jù)客戶(hù)端或者是名稱(chēng)節(jié)點(diǎn)的調(diào)度來(lái)進(jìn)行數(shù)據(jù)的存儲(chǔ)和檢索,并且向名稱(chēng)節(jié)點(diǎn)定期發(fā)送自己所存儲(chǔ)的塊的列表。
        • 每個(gè)數(shù)據(jù)節(jié)點(diǎn)中的數(shù)據(jù)會(huì)被保存在各自節(jié)點(diǎn)的本地Linux文件系統(tǒng)中。






        往期推薦

        MyBatis 架構(gòu)與原理

        非常強(qiáng)悍的 RabbitMQ 總結(jié),寫(xiě)得真好!

        快來(lái)?yè)尲t包!

        不重啟JVM,替換掉已經(jīng)加載的類(lèi),偷天換日?



        下方二維碼關(guān)注我

        技術(shù)草根,堅(jiān)持分享 編程,算法,架構(gòu)

        看完文章,餓了點(diǎn)外賣(mài),點(diǎn)擊 ??《無(wú)門(mén)檻外賣(mài)優(yōu)惠券,每天免費(fèi)領(lǐng)!》

        朋友,助攻一把!點(diǎn)個(gè)在看!


        瀏覽 145
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美人体一区二区三区 | 视频黄色国产 | 操我骚逼| 国产精品久热 | 性生活免费看视频 | 黄色短片小说 | 园产精品久久久久久久7电影 | 成人网站在线进入爽爽爽 | 毛片黄片网站 | 潘金莲伦理一级片 |