大數(shù)據(jù)學(xué)習(xí)之旅---HDFS文件系統(tǒng)

2019/11/19 Caesar

前言

入門大數(shù)據(jù)技術(shù),當(dāng)選Hadoop。可以說Hadoop是大數(shù)據(jù)生態(tài)的基礎(chǔ),Hadoop是一套行業(yè)大數(shù)據(jù)標(biāo)準(zhǔn)開源文件,可以實(shí)現(xiàn)在分布式環(huán)境下提供海量數(shù)據(jù)的處理能力,我們就從Hadoop來開始學(xué)習(xí)大數(shù)據(jù)!

Hadoop是什么

??Hadoop在分布式環(huán)境下提供了海量數(shù)據(jù)的處理能力。幾乎所有主流廠商都圍繞Hadoop開發(fā)工具、開源軟件、商業(yè)化工具和技術(shù)服務(wù)。

Hadoop組成

  1. HDFS : Hadoop Distributed File System 分布式文件系統(tǒng)
  2. YARN : Yet Another Resource Negotiator 資源管理調(diào)度系統(tǒng)
  3. Mapreduce :分布式計(jì)算框架

HDFS

1. HDFS架構(gòu)

image.png

主從架構(gòu):
NameNode (名稱節(jié)點(diǎn)):NameNode維護(hù)文件系統(tǒng)名稱空間。對文件系統(tǒng)名稱空間或其屬性的任何更改均由NameNode記錄。應(yīng)用程序可以指定HDFS應(yīng)該維護(hù)的文件副本的數(shù)量。文件的副本數(shù)稱為該文件的復(fù)制因子。此信息由NameNode存儲。NameNode是所有HDFS元數(shù)據(jù)的仲裁器和存儲庫。
DataNode (數(shù)據(jù)節(jié)點(diǎn)):DataNode是存儲數(shù)據(jù)的集群節(jié)點(diǎn)。

2. HDFS如何實(shí)現(xiàn)數(shù)據(jù)容錯(cuò)

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

??HDFS將所有存儲其中的文件分成若干個(gè)塊,除最后一個(gè)塊,其余塊大小相等,默認(rèn)為128M,可根據(jù)文件配置。復(fù)制文件的塊的目的是為了容錯(cuò),應(yīng)用程序可以指定復(fù)制的副本數(shù),即需要存儲幾份相同的數(shù)據(jù)。
??NameNode決定所有塊復(fù)制的細(xì)節(jié)。它定期從眾多 DataNode 中接受心跳信號和 Block Report,其中 Block Report 包含 DataNode 上所有塊的列表。圖示如下:

image.png

2.2 機(jī)制感知策略(可略)

??HDFS 通過機(jī)制感知策略,一種特定的算法來確定塊的位置。
??NameNode和JobTracker通過調(diào)用管理員配置模塊中的APIresolve來獲取集群里每個(gè)slave的機(jī)架id。該API將slave的DNS名稱(或者IP地址)轉(zhuǎn)換成機(jī)架id。使用哪個(gè)模塊是通過配置項(xiàng)topology.node.switch.mapping.impl來指定的。模塊的默認(rèn)實(shí)現(xiàn)會調(diào)用topology.script.file.name配置項(xiàng)指定的一個(gè)的腳本/命令。 如果topology.script.file.name未被設(shè)置,對于所有傳入的IP地址,模塊會返回/default-rack作為機(jī)架id。在Map/Reduce部分還有一個(gè)額外的配置項(xiàng)mapred.cache.task.levels,該參數(shù)決定cache的級數(shù)(在網(wǎng)絡(luò)拓?fù)渲校@?,如果默認(rèn)值是2,會建立兩級的cache- 一級針對主機(jī)(主機(jī) -> 任務(wù)的映射)另一級針對機(jī)架(機(jī)架 -> 任務(wù)的映射)。

2.3 副本放置策略

??HDFS 通過副本放置策略在集群上不同節(jié)點(diǎn)放置副本,副本數(shù)可通過配置文件更改,下面介紹大多數(shù)情況下采用的策略。
??當(dāng)復(fù)制因子為3時(shí),HDFS的放置策略是將一個(gè)副本放置在本地機(jī)架的一個(gè)節(jié)點(diǎn)上,將另一個(gè)副本放置在本地機(jī)架的不同節(jié)點(diǎn)上,將最后一個(gè)副本放置在不同機(jī)架的不同節(jié)點(diǎn)上。如果復(fù)制因子大于3,則在確定每個(gè)機(jī)架的副本數(shù)量低于上限(基本上是(副本-1)/機(jī)架+ 2)以下的同時(shí),隨機(jī)確定第4個(gè)及以下副本的位置。使用此策略,文件的副本不會均勻分布在機(jī)架上。三分之一的副本位于一個(gè)節(jié)點(diǎn)上,三分之二的副本位于一個(gè)機(jī)架上,其余三分之一則均勻分布在其余機(jī)架上。由于NameNode不允許DataNode具有同一塊的多個(gè)副本,因此創(chuàng)建的副本的最大數(shù)量是當(dāng)時(shí)DataNode的總數(shù)。

2.4 安全模式

??HDFS啟動后,NameNode進(jìn)入一個(gè)特殊的狀態(tài),稱為安全模式。在安全模式下,NameNode不會發(fā)生數(shù)據(jù)塊的復(fù)制,NameNode從DataNode接收心跳和Blockreport消息。Blockreport包含DataNode托管的數(shù)據(jù)塊列表。每個(gè)Block都有指定的最小副本數(shù)。如果一個(gè)Block的副本數(shù)達(dá)到最小副本數(shù),就被NameNode認(rèn)為是已經(jīng)安全復(fù)制的Block,即滿足HDFS對于數(shù)據(jù)冗余容錯(cuò)的要求。經(jīng)過一定百分比的Block被檢查為安全復(fù)制的時(shí)間,再加上30S后,NameNode推出安全模式,至于那些沒有達(dá)到最小副本數(shù)的Block,NameNode會將它們復(fù)制到其他DataNode。

3. HDFS元數(shù)據(jù)管理

3.1 NameNode

??HDFS命名空間由NameNode存儲,NameNode有兩種重要的數(shù)據(jù)結(jié)構(gòu),分別是FsImage 和 EditLog。稱為EditLog的事務(wù)日志來永久記錄文件系統(tǒng)元數(shù)據(jù)發(fā)生的每個(gè)更改。例如,在HDFS中創(chuàng)建一個(gè)新文件將導(dǎo)致NameNode將一條記錄插入到EditLog中。NameNode使用其本地主機(jī)OS文件系統(tǒng)中的文件來存儲EditLog。整個(gè)文件系統(tǒng)名稱空間(包括塊到文件的映射和文件系統(tǒng)屬性)存儲在名為FsImage的文件中。FsImage也作為文件存儲在NameNode的本地文件系統(tǒng)中。

3.2 SecondyNameNode

??SecondyNameNode 是 NameNode 冷備,一般放在與 NameNode 不同位置的主機(jī)上。SecondyNameNode 主要有兩個(gè)作用。一是在 NameNode 工作的時(shí)候, SecondyNameNode 通過對 NameNode 中 FsImage 和 EditLog 的操作來完成備份,提高 NameNode 的啟動效率。二是在 NameNode宕掉的時(shí)候, 用來恢復(fù)數(shù)據(jù),不過不能代替 NameNode 的作用,因?yàn)樗鼪]有元數(shù)據(jù)更新機(jī)制。

3.2.1 備份過程

??FsImage 存儲著塊到文件的映射和文件系統(tǒng)屬性,Edits 存儲著文件系統(tǒng)元數(shù)據(jù)發(fā)生的每個(gè)更改。在 NameNode 中,隨著運(yùn)行時(shí)間持續(xù), Edits 文件越來越大, 如果 NameNode 再次啟動,會將記錄在 Edits 文件的操作合并在 FsImage 文件中,并清空 Edits。但是因?yàn)?Edits 文件過大,啟動效率低。所以 SecondyNameNode 會經(jīng)常性將 FsImage 和 Edits 通過網(wǎng)絡(luò)拷貝到當(dāng)前節(jié)點(diǎn)進(jìn)行數(shù)據(jù)合并,再拷貝回 NameNode,并清空 Edits。同時(shí) SecondyNameNode 也保留了 元數(shù)據(jù)。觸發(fā)拷貝可以是兩個(gè)條件,一個(gè)是時(shí)間因素(超過默認(rèn)時(shí)間觸發(fā)),一個(gè)是 Edits 文件大?。ǔ^大小觸發(fā))。

4. 文件讀寫

4.1 讀文件

讀文件.PNG

??假設(shè)需求是在 HDFS 中下載文件至 Linux 本地,即讀文件。客戶端 Client 向 NameNode 發(fā)起讀文件請求, NameNode 會做權(quán)限檢查,確定 Client 是否有權(quán)限進(jìn)行讀文件,然后經(jīng)過算法分析,獲取文件的 Block 列表,列表包含內(nèi)容為 各Block存儲的最近的 DataNode,將列表返回給 Client。Client 獲取到位置信息后,和對應(yīng)的 DataNode 之間建立 pipeline 管道(水管),通過管道以 pakage 為單位將 Block 數(shù)據(jù)拷貝到 Client,然后由 Client 將各 Block 合并成一個(gè)最終的文件。

4.2 寫文件

寫文件.PNG

??假設(shè)需求是往 HDFS 中上傳文件,即寫文件??蛻舳?Client 向 NameNode 發(fā)起寫文件請求, NameNode 會做權(quán)限檢查,確定 Client 是否有權(quán)限進(jìn)行寫文件, NameNode 通過檢測
” DataNode 信息池“ 來獲取壓力不太大的 DataNode 列表,將列表返回給 Client。Client 獲取到位置信息后,和最近的一個(gè) DataNode 之間建立 pipeline 管道(水管),通過管道以 pakage 為單位將 Block 數(shù)據(jù)拷貝到此 DataNode,然后該 DataNode 再與下一個(gè) DataNode 建立管道,以此類推,將
Block 數(shù)據(jù)傳輸下去,在 DataNode 之間有一種應(yīng)答機(jī)制:ack應(yīng)答機(jī)制,當(dāng) DataNode 成功保存數(shù)據(jù)后,向前一個(gè) DataNode 報(bào)告?zhèn)鬏敵晒?,并關(guān)閉管道。最終 Client 成功地將數(shù)據(jù)寫入若干個(gè) DataNode中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容