日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

一、架構(gòu)原理

HDFS 是Hadoop Distributed File System的簡(jiǎn)稱,是HADOOP抽象文件系統(tǒng)的一種實(shí)現(xiàn)。Hadoop抽象文件系統(tǒng)可以與本地系統(tǒng)、Amazon S3等集成,甚至可以通過(guò)Web協(xié)議(webhsfs)來(lái)操作。

HDFS是由一個(gè)NAMENODE與多個(gè)DATANODE構(gòu)成,如下圖。

其中NAMENODE負(fù)責(zé)管理分布式文件系統(tǒng)的命名空間(Namespace)。

DATANODE 數(shù)據(jù)節(jié)點(diǎn),用來(lái)具體的存儲(chǔ)文件,維護(hù)了blockId 與 datanode本地文件的映射。

換個(gè)理解方法就是MASTER WORKER 模式,其中NAMENODE 對(duì)應(yīng)是master,進(jìn)所有datanode的datanode mate 信息的關(guān)聯(lián)以及監(jiān)控等相關(guān)事情。而DATANODE只負(fù)責(zé)存儲(chǔ)數(shù)據(jù)。

一文理解HDFS

 

HDFS基礎(chǔ)知識(shí)思維導(dǎo)圖如下:

一文理解HDFS

 

二、寫(xiě)文件過(guò)程

一文理解HDFS

 

  1. Client 調(diào)用 DistributedFileSystem 對(duì)象的 create 方法,創(chuàng)建一個(gè)文件輸出流(FSDataOutputStream)對(duì)象;
  2. 通過(guò) DistributedFileSystem 對(duì)象與集群的 NameNode 進(jìn)行一次 RPC 遠(yuǎn)程調(diào)用,在 HDFS 的 Namespace 中創(chuàng)建一個(gè)文件條目(Entry),此時(shí)該條目沒(méi)有任何的 Block,NameNode 會(huì)返回該數(shù)據(jù)每個(gè)塊需要拷貝的 DataNode 地址信息;
  3. 通過(guò) FSDataOutputStream 對(duì)象,開(kāi)始向 DataNode 寫(xiě)入數(shù)據(jù),數(shù)據(jù)首先被寫(xiě)入 FSDataOutputStream 對(duì)象內(nèi)部的數(shù)據(jù)隊(duì)列中,數(shù)據(jù)隊(duì)列由 DataStreamer 使用,它通過(guò)選擇合適的 DataNode 列表來(lái)存儲(chǔ)副本,從而要求 NameNode 分配新的 block;
  4. DataStreamer 將數(shù)據(jù)包以流式傳輸?shù)姆绞絺鬏數(shù)椒峙涞牡谝粋€(gè) DataNode 中,該數(shù)據(jù)流將數(shù)據(jù)包存儲(chǔ)到第一個(gè) DataNode 中并將其轉(zhuǎn)發(fā)到第二個(gè) DataNode 中,接著第二個(gè) DataNode 節(jié)點(diǎn)會(huì)將數(shù)據(jù)包轉(zhuǎn)發(fā)到第三個(gè) DataNode 節(jié)點(diǎn);
  5. DataNode 確認(rèn)數(shù)據(jù)傳輸完成,最后由第一個(gè) DataNode 通知 client 數(shù)據(jù)寫(xiě)入成功;
  6. 完成向文件寫(xiě)入數(shù)據(jù),Client 在文件輸出流(FSDataOutputStream)對(duì)象上調(diào)用 close 方法,完成文件寫(xiě)入;
  7. 調(diào)用 DistributedFileSystem 對(duì)象的 complete 方法,通知 NameNode 文件寫(xiě)入成功,NameNode 會(huì)將相關(guān)結(jié)果記錄到 editlog 中。

三、讀文件過(guò)程

一文理解HDFS

 

  1. Client 通過(guò) DistributedFileSystem 對(duì)象與集群的 NameNode 進(jìn)行一次 RPC 遠(yuǎn)程調(diào)用,獲取文件 block 位置信息;
  2. NameNode 返回存儲(chǔ)的每個(gè)塊的 DataNode 列表;
  3. Client 將連接到列表中最近的 DataNode;
  4. Client 開(kāi)始從 DataNode 并行讀取數(shù)據(jù);
  5. 一旦 Client 獲得了所有必須的 block,它就會(huì)將這些 block 組合起來(lái)形成一個(gè)文件。

四、問(wèn)題

1、數(shù)據(jù)錯(cuò)誤,hdfs是怎么解決的呢?

原因 :由于網(wǎng)絡(luò)傳輸與磁盤(pán)錯(cuò)誤等因素。

解決辦法:在客戶端讀取到數(shù)據(jù)后,會(huì)采用MD5和sha1對(duì)數(shù)據(jù)塊進(jìn)行校驗(yàn),以確定讀取到正確的數(shù)據(jù)。

具體流程:

  • 在文件被創(chuàng)建的時(shí)候,客戶端對(duì)文件進(jìn)行摘錄,并把這些信息寫(xiě)入數(shù)據(jù)的同一路徑隱藏文件中。
  • 當(dāng)客戶端讀取文件的時(shí)候,會(huì)先讀取該信息文件,然后利用該信息文件對(duì)每個(gè)讀取的數(shù)據(jù)塊進(jìn)行校驗(yàn),如果校驗(yàn)出錯(cuò),客戶端就會(huì)請(qǐng)求到另外一個(gè)數(shù)據(jù)接地那讀取該文件快,并且向NAMENODE報(bào)告這個(gè)文件塊有錯(cuò)誤,NAMENODE會(huì)定期檢查并且重新復(fù)制這個(gè)塊。

2、數(shù)據(jù)節(jié)點(diǎn)出錯(cuò)

DATANODE 難免會(huì)造成不可用

解決思路主要是通過(guò)心跳的方式

解決流程:

  1. 每個(gè)數(shù)據(jù)節(jié)點(diǎn)會(huì)定期向NAMEnode 節(jié)點(diǎn)發(fā)送心跳,向namenode報(bào)告自己的狀態(tài)。
  2. 當(dāng)數(shù)據(jù)節(jié)點(diǎn)發(fā)生故障或者網(wǎng)絡(luò)發(fā)生斷網(wǎng)時(shí),namenode節(jié)點(diǎn)就無(wú)法收到來(lái)自以下數(shù)據(jù)節(jié)點(diǎn)的心跳信息。這些數(shù)據(jù)節(jié)點(diǎn)就會(huì)被標(biāo)記為宕機(jī),節(jié)點(diǎn)上面的所有數(shù)據(jù)都會(huì)標(biāo)記為不可讀,namenode不會(huì)再給他們發(fā)送任何的IO請(qǐng)求。
  3. 這時(shí),有可能出現(xiàn)一種情況,由于一些數(shù)據(jù)節(jié)點(diǎn)的不可用,會(huì)導(dǎo)致一些數(shù)據(jù)塊的副本量小于冗余因子。
  4. namenode 會(huì)定期檢查這些數(shù)據(jù)情況,一旦發(fā)現(xiàn)某些數(shù)據(jù)塊的副本數(shù)量小于冗余因子,就會(huì)啟動(dòng)數(shù)據(jù)冗余復(fù)制,為它生產(chǎn)新的副本。
  5. HDFS和其他分布式文件系統(tǒng)最大的區(qū)別就是可以調(diào)整冗余數(shù)據(jù)的位置。

3、namenode 節(jié)點(diǎn)出錯(cuò)(單點(diǎn)故障問(wèn)題)

namenode節(jié)點(diǎn)保存了所有的元數(shù)據(jù)信息,其中最核心的兩大數(shù)據(jù)結(jié)構(gòu)是FsImage 合Editlog,如果這兩個(gè)文件發(fā)生了損壞,那么整個(gè)HDFS實(shí)例降 失效。

因此,HDFS設(shè)置了備份機(jī)制,把這些核心文件同步復(fù)制到備份服務(wù)器SecondaryNameNode上。當(dāng)namenode出錯(cuò)時(shí),就可以根據(jù)備份服務(wù)器SecondaryNameNode中的FsImage和Editlog數(shù)據(jù)進(jìn)行恢復(fù)。

4、小文件問(wèn)題以及DATANODE水平擴(kuò)展極限問(wèn)題

Hadoop中每個(gè)目錄、文件和block都會(huì)以對(duì)象的形式保存在NameNode的內(nèi)存中。根據(jù)經(jīng)驗(yàn)每個(gè)對(duì)象在內(nèi)存中大概占用150個(gè)字節(jié)。HDFS中保存2000萬(wàn)個(gè)文件,每個(gè)文件都在同一個(gè)文件夾中,而且每個(gè)文件都只有一個(gè)block,則NameNode需要6GB內(nèi)存。

小文件問(wèn)題:

1、當(dāng)NameNode重啟時(shí),它都需要從本地磁盤(pán)讀取每個(gè)文件的元數(shù)據(jù),意味著你要讀取300GB數(shù)據(jù)到內(nèi)存中,不可避免導(dǎo)致NameNode啟動(dòng)時(shí)間較長(zhǎng)。

2、一般來(lái)說(shuō),NameNode會(huì)不斷跟蹤并檢查每個(gè)數(shù)據(jù)塊的存儲(chǔ)位置。這是通過(guò)DataNode的定時(shí)心跳上報(bào)其數(shù)據(jù)塊來(lái)實(shí)現(xiàn)的。數(shù)據(jù)節(jié)點(diǎn)需要上報(bào)的block越多,則也會(huì)消耗越多的網(wǎng)絡(luò)帶寬/時(shí)延。即使節(jié)點(diǎn)之間是高速網(wǎng)絡(luò)(萬(wàn)兆/光纖),但不可避免的會(huì)帶來(lái)一些不好的影響。

3、NameNode本身使用300G內(nèi)存,相當(dāng)于JVM你需要配置300GB的heap,對(duì)于JVM來(lái)說(shuō)本來(lái)就存在穩(wěn)定性的風(fēng)險(xiǎn),比如GC時(shí)間較長(zhǎng)。

另外大量小文件意味著大量的隨機(jī)磁盤(pán)IO,磁盤(pán)IO通常是MapReduce性能的最大瓶頸之一,在HDFS中對(duì)于相同數(shù)量的數(shù)據(jù),一次大的順序讀取往往優(yōu)于幾次隨機(jī)讀取的性能。

5、HDFS為什么是128M這么大的一個(gè)數(shù)據(jù)塊呢?

在文件系統(tǒng)中,系統(tǒng)存儲(chǔ)文件時(shí),需要定位該數(shù)據(jù)在磁盤(pán)中的位置,再進(jìn)行傳輸處理。

定位在磁盤(pán)的位置需要時(shí)間,同樣文件傳輸也是需要時(shí)間的。

 

T(存儲(chǔ)時(shí)間)=T(定位時(shí)間)+T(傳輸時(shí)間)

如果每個(gè)要傳輸?shù)膲K設(shè)置得足夠大,那么從磁盤(pán)傳輸數(shù)據(jù)的時(shí)間可以明顯大于定位這個(gè)塊開(kāi)始位置的時(shí)間。

一文理解HDFS

 

假如文件太小,在namenode 的映射列表就會(huì)非常大,影響尋址時(shí)間,尋址時(shí)間如果大于傳輸時(shí)間,就沒(méi)有意義了。

但如果block 設(shè)置過(guò)太大,在MapReduce 任務(wù)中,Map或者Reduce任務(wù)的個(gè)數(shù)小于集群機(jī)器數(shù)量,會(huì)使得作業(yè)運(yùn)行效率很低。

6、namenode還存在哪些問(wèn)題以及怎么解決?

存在問(wèn)題:

  • 單點(diǎn)故障問(wèn)題
  • 不可以水平擴(kuò)展(是否可以通過(guò)縱向擴(kuò)展來(lái)解決?)
  • 系統(tǒng)整體性能受限于單個(gè)名稱節(jié)點(diǎn)的吞吐量
  • 單個(gè)名稱節(jié)點(diǎn)難以提供不同程序之間的隔離性

解決方案

熱備份 (HDFS HA)

HDFS HA(High Availability)是為了解決單點(diǎn)故障問(wèn)題

HA集群設(shè)置兩個(gè)名稱節(jié)點(diǎn),“活躍(Active)”和“待命(Standby)”

兩種名稱節(jié)點(diǎn)的狀態(tài)同步,可以借助于一個(gè)共享存儲(chǔ)系統(tǒng)來(lái)實(shí)現(xiàn)

一旦活躍名稱節(jié)點(diǎn)出現(xiàn)故障,就可以立即切換到待命名稱節(jié)點(diǎn)

Zookeeper確保一個(gè)名稱節(jié)點(diǎn)在對(duì)外服務(wù)

名稱節(jié)點(diǎn)維護(hù)映射信息,數(shù)據(jù)節(jié)點(diǎn)同時(shí)向兩個(gè)名稱節(jié)點(diǎn)匯報(bào)信息

一文理解HDFS

 

存在的問(wèn)題就有可能出現(xiàn)腦裂的問(wèn)題。

Federation

多個(gè)命名空間。為了處理一個(gè)namenode的局限性,搞了幾個(gè)namanode大家一起來(lái)管理。就像編程中的命名空間一樣

一文理解HDFS

 

在HDFS Federation中,設(shè)計(jì)了多個(gè)相互獨(dú)立的名稱節(jié)點(diǎn),使得HDFS的命名服務(wù)能夠水平擴(kuò)展,這些名稱節(jié)點(diǎn)分別進(jìn)行各自命名空間和塊的管理,相互之間是聯(lián)盟(Federation)關(guān)系,不需要彼此協(xié)調(diào)。并且向后兼容

HDFS Federation中,所有名稱節(jié)點(diǎn)會(huì)共享底層的數(shù)據(jù)節(jié)點(diǎn)存儲(chǔ)資源,數(shù)據(jù)節(jié)點(diǎn)向所有名稱節(jié)點(diǎn)匯報(bào)

屬于同一個(gè)命名空間的塊構(gòu)成一個(gè)“塊池

HDFS Federation設(shè)計(jì)可解決單名稱節(jié)點(diǎn)存在的以下幾個(gè)問(wèn)題:

1. HDFS集群擴(kuò)展性。多個(gè)名稱節(jié)點(diǎn)各自分管一部分目錄,使得一個(gè)集群可以擴(kuò)展到更多節(jié)點(diǎn),不再像HDFS1.0中那樣由于內(nèi)存的限制制約文件存儲(chǔ)數(shù)目

2. 性能更高效。多個(gè)名稱節(jié)點(diǎn)管理不同的數(shù)據(jù),且同時(shí)對(duì)外提供服務(wù),將為用戶提供更高的讀寫(xiě)吞吐率

3. 良好的隔離性。用戶可根據(jù)需要將不同業(yè)務(wù)數(shù)據(jù)交由不同名稱節(jié)點(diǎn)管理,這樣不同業(yè)務(wù)之間影響很小

參考文章

https://developer.ibm.com/zh/articles/os-cn-hadoop-name-node/

https://blog.csdn.net/xjz729827161/article/details/79463140

分享到:
標(biāo)簽:HDFS
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定