最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Hadoop源碼分析五hdfs架構(gòu)原理剖析

 更新時間:2021年09月02日 17:21:03   作者:huserblog  
本篇是Hadoop源碼分析系列文章第五篇,主要介紹Hadoop的hdfs架構(gòu)原理剖析,后續(xù)本系列文章會持續(xù)更新,有需要的朋友可以借鑒參考下

1、 hdfs架構(gòu)

本系列文章三中出現(xiàn)了與hdfs相關(guān)的數(shù)個服務(wù)。

如果在hadoop配置時寫的配置文件不同,啟動的服務(wù)也有所區(qū)別

按照本系列文章二中的配置,會啟動以下服務(wù):namenode、journalnode、datanodezkfc。其關(guān)系如圖:

在這里插入圖片描述

從圖中可以看出namenode是絕對的中心節(jié)點(diǎn),所有的節(jié)點(diǎn)都會和它進(jìn)行交互。圖中namenode有兩臺,一臺為active,另一臺為standby。其中active是正常提供namenode服務(wù),standby不對外提供服務(wù),它負(fù)責(zé)及時同步active的數(shù)據(jù),并在active故障的時候轉(zhuǎn)換為active繼續(xù)提供服務(wù)。

namenode的下方是三臺datanode。

datanode負(fù)責(zé)存儲集群中的數(shù)據(jù),并向namenode匯報(bào)其存儲數(shù)據(jù)的情況。

namenode左右兩邊的是兩個zkfc。

它負(fù)責(zé)的是namenode的故障轉(zhuǎn)移,在active的namenode故障的時候,由zkfc將standby的namenode轉(zhuǎn)換為active。zkfc上方連接的是zookeeper,它對namenode的故障轉(zhuǎn)移是依靠zookeeper來實(shí)現(xiàn)的。

namenode的上方是三臺journalnode集群。

journalnode負(fù)責(zé)存儲namenode的日志文件,由active的namenode向journalnode寫入,standby的namenode不會向journalnode寫日志,standby主要會從其中讀取日志文件。

注意,這里的日志文件不是普通的運(yùn)行日志,而是namenode的操作日志。例如,客戶端向hdfs上傳了一個文件,這時namenode會執(zhí)行一系列操作來完成這次上傳,而這些操作連同操作方式與操作內(nèi)容一起寫到操作日志中(journalnode中),通過這些操作日志可以還原這次上傳操作。

2、 namenode介紹

namenode作為hdfs的核心,它主要的作用是管理文件的元數(shù)據(jù)

元數(shù)據(jù)主要包括三類:文件的命名空間、文件與塊的對應(yīng)關(guān)系、塊的存儲位置。

文件與塊的對應(yīng)關(guān)系中的塊

是由于hdfs在存儲文件的時候并不是將整個文件將存儲在某一臺datanode上,而是將文件按照指定的大小切割成一定數(shù)量的塊。

namenode負(fù)責(zé)管理hdfs的元數(shù)據(jù)

這意味著所有與hdfs相關(guān)的操作都需要與namenode進(jìn)行交互。這樣namenode的速度就不能太慢,所以namenode將元數(shù)據(jù)存儲在內(nèi)存中。但是數(shù)據(jù)不能只存儲在內(nèi)存中,所以這時需要將數(shù)據(jù)持久化到硬盤中。

namenode的數(shù)據(jù)持久化,采用了一種日志加快照的方式

日志即上文提到的操作日志,快照即將內(nèi)存中的數(shù)據(jù)狀態(tài)直接序列化到硬盤。在安裝集群的時候會先格式化namenode,這時便會創(chuàng)建一個快照文件,名為fsimage。然后在namenode運(yùn)行的時候它會將操作日志寫入到fsimage文件所在的文件夾中。這里根據(jù)配置的不同寫入的路徑有所不同。如果使用本系列文章二中的配置,這個日志文件還會被寫到j(luò)ournalnode中。

最后還會有一個程序讀取這個快照文件和日志文件

將數(shù)據(jù)恢復(fù)到最新的狀態(tài),然后再更新原來的快照文件。下一次再讀取快照和日志文件的時候就只讀最新的文件。這里的程序會根據(jù)配置的不同有所區(qū)別,按照本系列文章二中的配置來說,是standby的namenode。這里為什么不直接使用active的namenode執(zhí)行更新fsimage文件,而是使用standby的namenode先讀取active的日志,然后再重演一遍操作日志恢復(fù)數(shù)據(jù)再由standby的namenode更新fsimage文件。這是因?yàn)楦耭simage操作很費(fèi)時間,由active的namenode執(zhí)行會導(dǎo)致整個集群不可用。

以上就是Hadoop源碼分析五hdfs架構(gòu)原理剖析的詳細(xì)內(nèi)容,本系列下一篇文章傳送門Hadoop源碼分析六啟動文件namenode原理詳解更多關(guān)于Hadoop源碼分析的資料請持續(xù)關(guān)注腳本之家更新!

相關(guān)文章

  • idea搭建mybatis環(huán)境配置全過程

    idea搭建mybatis環(huán)境配置全過程

    本文介紹了如何以IDEA搭建MyBatis環(huán)境配置的方法,包括步驟和注意事項(xiàng),通過本文的介紹,可以輕松地以IDEA搭建MyBatis環(huán)境配置,提高開發(fā)效率
    2023-10-10
  • MyBatis-Plus實(shí)現(xiàn)對查詢結(jié)果進(jìn)行分頁的基本步驟

    MyBatis-Plus實(shí)現(xiàn)對查詢結(jié)果進(jìn)行分頁的基本步驟

    MyBatis-Plus 是一個 MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,MyBatis-Plus 支持多種數(shù)據(jù)庫的分頁查詢,其分頁功能是通過 Page 類實(shí)現(xiàn)的,本文介紹了使用 MyBatis-Plus 實(shí)現(xiàn)分頁查詢的基本步驟,需要的朋友可以參考下
    2024-08-08
  • 使用AbstractRoutingDataSource實(shí)現(xiàn)數(shù)據(jù)源動態(tài)切換的實(shí)例

    使用AbstractRoutingDataSource實(shí)現(xiàn)數(shù)據(jù)源動態(tài)切換的實(shí)例

    AbstractRoutingDataSource 是 Spring 框架提供的一個抽象類,用于實(shí)現(xiàn)動態(tài)數(shù)據(jù)源路由,這個類主要用于多數(shù)據(jù)源場景,其中可以根據(jù)不同的條件動態(tài)地切換到不同的數(shù)據(jù)源,本文給大家介紹了如何使用AbstractRoutingDataSource實(shí)現(xiàn)數(shù)據(jù)源動態(tài)切換,需要的朋友可以參考下
    2024-03-03
  • 利用反射獲取Java類中的靜態(tài)變量名及變量值的簡單實(shí)例

    利用反射獲取Java類中的靜態(tài)變量名及變量值的簡單實(shí)例

    下面小編就為大家?guī)硪黄梅瓷浍@取Java類中的靜態(tài)變量名及變量值的簡單實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • SpringBoot如何進(jìn)行業(yè)務(wù)校驗(yàn)實(shí)例詳解

    SpringBoot如何進(jìn)行業(yè)務(wù)校驗(yàn)實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于SpringBoot如何進(jìn)行業(yè)務(wù)校驗(yàn)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • JMeter連接Mysql數(shù)據(jù)庫的實(shí)現(xiàn)步驟

    JMeter連接Mysql數(shù)據(jù)庫的實(shí)現(xiàn)步驟

    本文主要介紹了JMeter操作Mysql數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • ArrayList及HashMap的擴(kuò)容規(guī)則講解

    ArrayList及HashMap的擴(kuò)容規(guī)則講解

    今天小編就為大家分享一篇關(guān)于ArrayList及HashMap的擴(kuò)容規(guī)則講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 基于JAVA中的四種JSON解析方式詳解

    基于JAVA中的四種JSON解析方式詳解

    這篇文章主要介紹了基于JAVA中的四種JSON解析方式詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • MyBatis實(shí)現(xiàn)批量插入方法實(shí)例

    MyBatis實(shí)現(xiàn)批量插入方法實(shí)例

    最近在公司項(xiàng)目開發(fā)中遇到批量數(shù)據(jù)插入或者更新,下面這篇文章主要給大家介紹了關(guān)于MyBatis實(shí)現(xiàn)批量插入的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 詳解Java中的ThreadLocal

    詳解Java中的ThreadLocal

    ThreadLocal是JDK包提供的,它提供線程本地變量,如果創(chuàng)建一個ThreadLocal變量,那么訪問這個變量的每個線程都會有這個變量的一個副本,在實(shí)際多線程操作的時候,操作的是自己本地內(nèi)存中的變量,從而規(guī)避了線程安全問題
    2021-06-06

最新評論

文成县| 连平县| 方山县| 长顺县| 左贡县| 高青县| 哈尔滨市| 南汇区| 逊克县| 长汀县| 中西区| 麻阳| 成安县| 平阴县| 长宁县| 盘锦市| 通海县| 西安市| 望都县| 霍州市| 桦川县| 郓城县| 北川| 徐水县| 曲周县| 贡山| 长沙市| 黎城县| 景德镇市| 湄潭县| 喜德县| 苍梧县| 叶城县| 黄梅县| 德化县| 海原县| 临城县| 上饶市| 肃北| 南川市| 满洲里市|