日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

分布式文件系統(tǒng)-HDFS

系統(tǒng) 1848 0

HDFS

? ?Hadoop的核心就是HDFS與MapReduce。那么HDFS又是基于GFS的設(shè)計(jì)理念搞出來(lái)的。

? ?HDFS全稱(chēng)是Hadoop Distributed System。HDFS是為以流的方式存取大文件而設(shè)計(jì)的。適用于幾百M(fèi)B,GB以及TB,并寫(xiě)一次讀多次的場(chǎng)合。而對(duì)于低延時(shí)數(shù)據(jù)訪問(wèn)、大量小文件、同時(shí)寫(xiě)和任意的文件修改,則并不是十分適合。

?優(yōu)點(diǎn):

? ? ? 1)適合存儲(chǔ)非常大的文件

? ? ? 2)適合流式數(shù)據(jù)讀取,即適合“只寫(xiě)一次,讀多次”的數(shù)據(jù)處理模式

? ? ? 3)適合部署在廉價(jià)的機(jī)器上

缺點(diǎn):

? ? ? 1)不適合存儲(chǔ)大量的小文件,因?yàn)槭躈amenode內(nèi)存大小限制

? ? ?2)不適合實(shí)時(shí)數(shù)據(jù)讀取,高吞吐量和實(shí)時(shí)性是相悖的,HDFS選擇前者

? ? ?3)不適合需要經(jīng)常修改數(shù)據(jù)的場(chǎng)景

? ?數(shù)據(jù)塊:

? ? ?每個(gè)磁盤(pán)都有默認(rèn)的數(shù)據(jù)塊大小,一般就是521字節(jié)。這是磁盤(pán)進(jìn)行數(shù)據(jù)讀寫(xiě)的最小單位。HDFS同樣也有塊(block)的概念,但是大得多,有64MB。與單一磁盤(pán)上的文件系統(tǒng)一樣,HDFS上的文件也被劃分為塊大小的多個(gè)分塊。但是還是有所不同,比如HDFS中小于一個(gè)塊大小的文件不會(huì)占據(jù)整個(gè)塊的空間。

? ? 對(duì)分布式文件系統(tǒng)中的快進(jìn)行抽象的好處:

? ? 1)一個(gè)文件的大小可能會(huì)大于網(wǎng)絡(luò)中任意一個(gè)磁盤(pán)的容量,文件的所有塊并不需要存儲(chǔ)在同一個(gè)磁盤(pán)上,因此可以利用集群上的任意一個(gè)磁盤(pán)進(jìn)行存儲(chǔ),但是對(duì)于HDFS來(lái)說(shuō),它是存儲(chǔ)了一個(gè)文件。

? ? ? ? (這不就正是我們要的效果嗎)?

? ? 2)以抽象塊為存儲(chǔ)單元,簡(jiǎn)化了設(shè)計(jì)。還方便塊的備份。

?

?

? ? 分布式文件系統(tǒng)-HDFS

?

? ? ? ? ?HDFS的架構(gòu)如上圖所示,總體上采用了 Master/Slave 的架構(gòu),主要有以下4個(gè)部分組成:

? ? ? ?1、Client

? ? ? ? ? ? 客戶(hù)端,就是我們通過(guò)調(diào)用接口實(shí)現(xiàn)的代碼。

? ? ? ?2、NameNode

? ? ? ? ? ?整個(gè)HDFS集群只有一個(gè)NameNode,它存儲(chǔ)整個(gè)集群文件分別的元數(shù)據(jù)信息。這些信息以fsimage和editlog兩個(gè)文件存儲(chǔ)在本地磁盤(pán),Client通過(guò)這些元數(shù)據(jù)信息可以找到相應(yīng)的文件。此外,NameNode還 ? ? ?負(fù)責(zé)監(jiān)控DataNode的健康情況,一旦發(fā)現(xiàn)DataNode異常,就將其踢出,并拷貝其上數(shù)據(jù)至其它DataNode。

? ? ? 3、Secondary NameNode

? ? ? ? ? Secondary NameNode負(fù)責(zé)定期合并NameNode的fsimage和editlog。這里特別注意,它不是NameNode的熱備,所以NameNode依然是Single Point of Failure。它存在的主要目的是為了分擔(dān)一部分 ? ? ? ? ? ? NameNode的工作(特別是消耗內(nèi)存的工作,因?yàn)閮?nèi)存資源對(duì)NameNode來(lái)說(shuō)非常珍貴)。

? ? ? 4、DataNode

? ? ? ? ? ?DataNode負(fù)責(zé)數(shù)據(jù)的實(shí)際存儲(chǔ)。當(dāng)一個(gè) 文件上傳 至HDFS集群時(shí),它以Block為基本單位分布在各個(gè)DataNode中,同時(shí),為了保證數(shù)據(jù)的可靠性,每個(gè)Block會(huì)同時(shí)寫(xiě)入多個(gè)DataNode中(默認(rèn)為3) ??

?

? ? ? 那么文件如何存儲(chǔ)的呢?

? ? ?要存儲(chǔ)的文件會(huì)分成很多塊,存到Datanode里。分塊的原則:除了最后一個(gè)數(shù)據(jù)塊,其它數(shù)據(jù)塊的大小相同,一般為64MB or 128MB。?每個(gè)數(shù)據(jù)塊有副本(一般為3):副本多了浪費(fèi)空間。?

? ? 副本存儲(chǔ):在大多數(shù)情況下,副本系數(shù)是3,HDFS的存放策略是將一個(gè)副本存放在本地機(jī)架的節(jié)點(diǎn)上,一個(gè)副本放在同一機(jī)架的另一個(gè)節(jié)點(diǎn)上,。

? ?? HDFS通信協(xié)議?

? ? ?所有的 HDFS 通訊協(xié)議都是構(gòu)建在 TCP/IP 協(xié)議上。客戶(hù)端通過(guò)一個(gè)可 配置的端口連接到 Namenode , 通過(guò) ClientProtocol 與 Namenode 交互。而 Datanode 是使用 DatanodeProtocol 與 Namenode 交互。再設(shè)計(jì)上, DataNode 通過(guò)周期性的向 NameNode 發(fā)送心跳和數(shù)據(jù)塊來(lái)保持和 NameNode 的通信,數(shù)據(jù)塊報(bào)告的信息包括數(shù)據(jù)塊的屬性,即數(shù)據(jù)塊屬于哪 個(gè)文件,數(shù)據(jù)塊 ID ,修改時(shí)間等, NameNode 的 DataNode 和數(shù)據(jù)塊的映射 關(guān)系就是通過(guò)系統(tǒng)啟動(dòng)時(shí) DataNode 的數(shù)據(jù)塊報(bào)告建立的。從 ClientProtocol 和 Datanodeprotocol 抽象出一個(gè)遠(yuǎn)程調(diào)用 ( RPC ), 在設(shè)計(jì)上, Namenode 不會(huì)主動(dòng)發(fā)起 RPC , 而是是響應(yīng)來(lái)自客戶(hù)端和 Datanode 的 RPC 請(qǐng)求。?
? ? (這個(gè)在我們進(jìn)行hadoop文件配置的時(shí)候就可以感受到,都是通過(guò)一個(gè)Ip地址加上一個(gè)端口號(hào)來(lái)訪問(wèn)對(duì)方的)

? ? ? 文件讀取的過(guò)程如下:

  1. 使用HDFS提供的客戶(hù)端開(kāi)發(fā)庫(kù)Client,向遠(yuǎn)程的Namenode發(fā)起RPC請(qǐng)求;
  2. Namenode會(huì)視情況返回文件的部分或者全部block列表,對(duì)于每個(gè)block,Namenode都會(huì)返回有該block拷貝的DataNode地址;
  3. 客戶(hù)端開(kāi)發(fā)庫(kù)Client會(huì)選取離客戶(hù)端最接近的DataNode來(lái)讀取block;如果客戶(hù)端本身就是DataNode,那么將從本地直接獲取數(shù)據(jù).
  4. 讀取完當(dāng)前block的數(shù)據(jù)后,關(guān)閉與當(dāng)前的DataNode連接,并為讀取下一個(gè)block尋找最佳的DataNode;
  5. 當(dāng)讀完列表的block后,且文件讀取還沒(méi)有結(jié)束,客戶(hù)端開(kāi)發(fā)庫(kù)會(huì)繼續(xù)向Namenode獲取下一批的block列表。
  6. 讀取完一個(gè)block都會(huì)進(jìn)行checksum驗(yàn)證,如果讀取datanode時(shí)出現(xiàn)錯(cuò)誤,客戶(hù)端會(huì)通知Namenode,然后再?gòu)南乱粋€(gè)擁有該block拷貝的datanode繼續(xù)讀。

? ? ?寫(xiě)入文件的過(guò)程如下:

  1. 使用HDFS提供的客戶(hù)端開(kāi)發(fā)庫(kù)Client,向遠(yuǎn)程的Namenode發(fā)起RPC請(qǐng)求;
  2. Namenode會(huì)檢查要?jiǎng)?chuàng)建的文件是否已經(jīng)存在,創(chuàng)建者是否有權(quán)限進(jìn)行操作,成功則會(huì)為文件創(chuàng)建一個(gè)記錄,否則會(huì)讓客戶(hù)端拋出異常;
  3. 當(dāng) 客戶(hù)端開(kāi)始寫(xiě)入文件的時(shí)候,開(kāi)發(fā)庫(kù)會(huì)將文件切分成多個(gè)packets,并在內(nèi)部以數(shù)據(jù)隊(duì)列"data queue"的形式管理這些packets,并向Namenode申請(qǐng)新的blocks,獲取用來(lái)存儲(chǔ)replicas的合適的datanodes列表, 列表的大小根據(jù)在Namenode中對(duì)replication的設(shè)置而定。
  4. 開(kāi)始以pipeline(管道)的形式將packet寫(xiě)入所 有的replicas中。開(kāi)發(fā)庫(kù)把packet以流的方式寫(xiě)入第一個(gè)datanode,該datanode把該packet存儲(chǔ)之后,再將其傳遞給在此 pipeline中的下一個(gè)datanode,直到最后一個(gè)datanode,這種寫(xiě)數(shù)據(jù)的方式呈流水線(xiàn)的形式。
  5. 最后一個(gè)datanode成功存儲(chǔ)之后會(huì)返回一個(gè)ack packet,在pipeline里傳遞至客戶(hù)端,在客戶(hù)端的開(kāi)發(fā)庫(kù)內(nèi)部維護(hù)著"ack queue",成功收到datanode返回的ack packet后會(huì)從"ack queue"移除相應(yīng)的packet。
  6. 如 果傳輸過(guò)程中,有某個(gè)datanode出現(xiàn)了故障,那么當(dāng)前的pipeline會(huì)被關(guān)閉,出現(xiàn)故障的datanode會(huì)從當(dāng)前的pipeline中移除, 剩余的block會(huì)繼續(xù)剩下的datanode中繼續(xù)以pipeline的形式傳輸,同時(shí)Namenode會(huì)分配一個(gè)新的datanode,保持 replicas設(shè)定的數(shù)量。

分布式文件系統(tǒng)-HDFS


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 灵台县| 宁南县| 嘉善县| 普陀区| 新津县| 武胜县| 岱山县| 米易县| 和林格尔县| 汝城县| 丹江口市| 康平县| 内丘县| 闻喜县| 祁东县| 北宁市| 兴安县| 巴彦淖尔市| 布尔津县| 阜新| 辛集市| 德阳市| 类乌齐县| 南宫市| 文化| 通州市| 福建省| 莱阳市| 安远县| 周口市| 潮州市| 永安市| 汽车| 白玉县| 陆良县| 上蔡县| 齐河县| 志丹县| 晋中市| 屯留县| 平泉县|