佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Hadoop 分布式存儲系統(tǒng) HDFS的實例詳解

Hadoop 分布式存儲系統(tǒng) HDFS的實例詳解

熱門標(biāo)簽:服務(wù)器配置 網(wǎng)站文章發(fā)布 美圖手機 鐵路電話系統(tǒng) 銀行業(yè)務(wù) 檢查注冊表項 智能手機 呼叫中心市場需求

HDFS是Hadoop Distribute File System 的簡稱,也就是Hadoop的一個分布式文件系統(tǒng)。

一、HDFS的優(yōu)缺點

1.HDFS優(yōu)點:

  a.高容錯性

    .數(shù)據(jù)保存多個副本

    .數(shù)據(jù)丟的失后自動恢復(fù)

  b.適合批處理

    .移動計算而非移動數(shù)據(jù)

    .數(shù)據(jù)位置暴露給計算框架

  c.適合大數(shù)據(jù)處理

    .GB、TB、甚至PB級的數(shù)據(jù)處理

    .百萬規(guī)模以上的文件數(shù)據(jù)

    .10000+的節(jié)點

  d.可構(gòu)建在廉價的機器上

    .通過多副本存儲,提高可靠性

    .提供了容錯和恢復(fù)機制

2.HDFS缺點

  a.低延遲數(shù)據(jù)訪問處理較弱

    .毫秒級別的訪問響應(yīng)較慢

    .低延遲和高吞吐率的請求處理較弱

  b.大量小文件存取處理較弱

    .會占用大量NameNode的內(nèi)存

    .尋道時間超過讀取時間

  c.并發(fā)寫入、文件隨機修改

    .一個文件僅有一個寫者

    .僅支持Append寫入

二、HDFS的架構(gòu)

  如上圖所示,HDFS也是按照Master和Slave的結(jié)構(gòu)。分NameNode、SecondaryNameNode、DataNode這幾個角色。

  NameNode:是Master節(jié)點,是大領(lǐng)導(dǎo)。管理數(shù)據(jù)塊映射;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間;

  SecondaryNameNode:是一個小弟,分擔(dān)大哥namenode的一部分工作量;是NameNode的冷備份;合并fsimage和fsedits然后再發(fā)給namenode。

  DataNode:Slave節(jié)點,奴隸,干活的。負(fù)責(zé)存儲client發(fā)來的數(shù)據(jù)塊block;執(zhí)行數(shù)據(jù)塊的讀寫操作。

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

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

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

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

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

  SecondaryNameNode負(fù)責(zé)定時默認(rèn)1小時,從namenode上,獲取fsimage和edits來進(jìn)行合并,然后再發(fā)送給namenode。減少namenode的工作量。

三、HDFS數(shù)據(jù)存儲單元(block)

1.文件被切割成固大小的數(shù)據(jù)塊

  a.默認(rèn)數(shù)據(jù)塊大小是64MB,數(shù)據(jù)塊大小可配置

  b.若數(shù)據(jù)塊大小不到64MB,則單獨成一個數(shù)據(jù)塊

2.一個文件存儲方式

  a.按大小切割成若干個block,存儲在不同的節(jié)點上

  b.每個block默認(rèn)存三個副本

  block大小和副本數(shù)由Client上傳文件的時候設(shè)置,文件上傳成功以后,副本數(shù)可以變更,但是Block 大小不可變。

四、HDFS設(shè)計思想

  一個50G的文件上傳到HDFS上,首先該文件被切割成了若干個64MB的block,block1在node1,node2,node3上存儲了3(默認(rèn)3個,可以設(shè)置)個副本,block2在node2,node3,node4上存儲了3個副 本block3....直到所有的block都存儲3個副本;

五、NameNode(NN)、 SencondryNameNode (SNN)、DataNode(DN)

1.NameNode (NN) 的工作

  a.接受客戶端的讀寫服務(wù)

  b.保存metadata的信息,包括:文件的owership和permissions、文件包含哪些block、block保存在哪些DataNode節(jié)點上(在啟動時由DataNode上報)

  c.NameNode 的metadata信息會在啟動后加載到內(nèi)存中

    .metadata信息在磁盤上存儲的文件為“fsimage”

    .Block的位置信息不保存在fsimage中(由DataNode上報)

    .edits中保存對metadata的操作日志

2.SecondryNameNode(SNN) 的工作

  a.它不是NN的備份(但可以做NN的部分備份的工作),它的主要工作是幫助NN合并edits log 減少NN的啟動時間

  b.SNN合并時機

    .根據(jù)配置文件設(shè)置的時間間隔fs.checkpoint.period 默認(rèn)3600秒

    .根據(jù)配置文件設(shè)置的edits log的大小 fs.checpoint.size 默認(rèn)的edits log 大小為64MB

  c.SNN合并流程

    1>NN 創(chuàng)建一個新的edits log 來接替老的 edits 的工作

    2>NN 將fsimage 和 舊的edits 拷備到 SNN上

    3>SNN上進(jìn)行合并操作,產(chǎn)生一個新的fsimage

    4>將新的fsimage 復(fù)制一份到NN上

    5>使用新的fsimage 和 新的edits log

3.DataNode (DN)

  a.存儲數(shù)塊(block)

  b.啟動DN線程時,DN會自動向NN匯報Block的信息

  c.NN向DN發(fā)送心跳檢測,與其DN保持聯(lián)系(3秒一次) 如果NN 連續(xù)10分鐘沒有收到DN的心跳,則認(rèn)為該DN已經(jīng)lost,并從其他DN中備份一份該DN上的所有block

  d.block的放置策略

    .第一個副本,放置在上傳文件的DN上,如果是集群外提交,則隨便選擇一臺磁盤、內(nèi)存、CPU不太忙的節(jié)點存儲

    .第二個副本,放置在與第一個副本不同機架上的節(jié)點上

    .第三個副本,放置在與第二個副本相同機架上的相鄰的節(jié)點上

    .更多副本隨機放置

六、HDFS的寫流程和讀流程

1.HDFS寫流程

    例:

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

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

  HDFS分布在三個機架上Rack1,Rack2,Rack3。

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

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

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

  Block1: host2,host1,host3

  Block2: host7,host8,host4

原理:

NameNode具有RackAware機架感知功能,這個可以配置。

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

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

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

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

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

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

    4>host1接收完第一個package后,發(fā)送給host3,同時接收host2發(fā)來的第二個package。

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

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

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

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

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

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

  分析,通過寫過程,我們可以了解到:

   ?、賹?T文件,我們需要3T的存儲,3T的網(wǎng)絡(luò)流量貸款。

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

    ③掛掉一個節(jié)點,沒關(guān)系,還有其他節(jié)點可以備份;甚至,掛掉某一個機架,也沒關(guān)系;其他機架上,也有備份。

2.讀流程

    例:

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

   那么,讀操作流程為:

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

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

     block1:host2,host1,host3

    block2:host7,host8,host4

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

七、HDFS文件權(quán)限

  1.與linux系統(tǒng)文件權(quán)限類似

    r:read w:write x:execute 權(quán)限x對于文件忽略,對于文件夾表示是否允許訪問

  2.如果linux系統(tǒng)用戶zhangsan使用hadoop命令創(chuàng)建一個文件 ,那么該文件在HDFS中的所有者就是zhangsan。

  3.HDFS權(quán)限的目:阻止好人做錯事,而不是阻止壞人做壞事;例:只要是zhangsan上傳的文件,那HDFS就認(rèn)為這個文件屬于張三,當(dāng)下次過來操作的還是zhangsan那就可以操作,而不需要密碼驗證之類的操作。

八、安全模式

在NameNode啟動以后會一段時間是處于安全模式,在安全模式下只可查看不能修進(jìn)行其他操作,因為在安全模式下NN和DN需要做很多工作;

  1.NN 啟動的時候首先需要將fsimage 載入內(nèi)存,并執(zhí)行編輯日志中的各項操作。

  2.一旦在文件系統(tǒng)中建立了一個新的元數(shù)據(jù)的映射,則創(chuàng)建一個新的fsimage 文件(與SNN配合)和一個空的edits文件

  3.安全模式下的NameNode,對客戶端是只讀的(顯示文件目錄、內(nèi)容等 ,其他的刪除、修改、重命名操作都會失?。?/p>

  4.在安全模式下,NameNode會收集來自DataNode匯報的block的信息,如果DN匯報的block的最副本數(shù)大于設(shè)置的最小副本數(shù),則會認(rèn)為是“安全”的。

   如果有block的副本數(shù)沒有達(dá)到設(shè)置的最小副本數(shù),則該block會被復(fù)制直到達(dá)到設(shè)置的最小副本數(shù)為止。

總結(jié)

以上所述是小編給大家介紹的Hadoop 分布式存儲系統(tǒng) HDFS的實例詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

您可能感興趣的文章:
  • Hadoop源碼分析三啟動及腳本剖析
  • Hadoop源碼分析二安裝配置過程詳解
  • Python API 操作Hadoop hdfs詳解
  • Hadoop源碼分析五hdfs架構(gòu)原理剖析

標(biāo)簽:上海 樂山 新疆 滄州 沈陽 長治 河南 紅河

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Hadoop 分布式存儲系統(tǒng) HDFS的實例詳解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    陇南市| 哈巴河县| 宣城市| 石嘴山市| 莱州市| 绩溪县| 萍乡市| 华容县| 孝义市| 台中市| 西充县| 上栗县| 弥渡县| 大安市| 缙云县| 马尔康县| 唐海县| 张家港市| 泸定县| 麻阳| 双江| 三穗县| 理塘县| 万山特区| 福泉市| 青神县| 遂宁市| 渑池县| 东乌珠穆沁旗| 太湖县| 高阳县| 久治县| 邵东县| 晋江市| 河津市| 景宁| 和顺县| 江阴市| 京山县| 金沙县| 岗巴县|