偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

HDFS 為何在大數(shù)據(jù)領(lǐng)域經(jīng)久不衰?

大數(shù)據(jù) 數(shù)據(jù)倉(cāng)庫(kù)
HDFS是最早的大數(shù)據(jù)存儲(chǔ)系統(tǒng),存儲(chǔ)著寶貴的數(shù)據(jù)資產(chǎn),各種新算法、框架要想得到廣泛使用,必須支持HDFS,才能獲取已存儲(chǔ)在里面的數(shù)據(jù)。所以大數(shù)據(jù)技術(shù)越發(fā)展,新技術(shù)越多,HDFS得到的支持越多,越離不開(kāi)HDFS。

1.概述

1.1 簡(jiǎn)介

  • Hadoop實(shí)現(xiàn)的一個(gè)分布式文件系統(tǒng)(Hadoop Distributed File System),簡(jiǎn)稱(chēng)HDFS。
  • 源自于Google的GFS論文,發(fā)表于2003年,HDFS是GFS的克隆版。

大數(shù)據(jù)中最寶貴、最難以代替的就是數(shù)據(jù),一切都圍繞數(shù)據(jù)。

HDFS是最早的大數(shù)據(jù)存儲(chǔ)系統(tǒng),存儲(chǔ)著寶貴的數(shù)據(jù)資產(chǎn),各種新算法、框架要想得到廣泛使用,必須支持HDFS,才能獲取已存儲(chǔ)在里面的數(shù)據(jù)。所以大數(shù)據(jù)技術(shù)越發(fā)展,新技術(shù)越多,HDFS得到的支持越多,越離不開(kāi)HDFS。HDFS也許不是最好的大數(shù)據(jù)存儲(chǔ)技術(shù),但依然是最重要的大數(shù)據(jù)存儲(chǔ)技術(shù)。

HDFS是如何實(shí)現(xiàn)大數(shù)據(jù)高速、可靠的存儲(chǔ)和訪(fǎng)問(wèn)的呢?

Hadoop分布式文件系統(tǒng)HDFS的設(shè)計(jì)目標(biāo)是管理數(shù)以千計(jì)的服務(wù)器、數(shù)以萬(wàn)計(jì)的磁盤(pán),將大規(guī)模的服務(wù)器計(jì)算資源當(dāng)作一個(gè)單一存儲(chǔ)系統(tǒng)進(jìn)行管理,對(duì)應(yīng)用程序提供數(shù)以PB計(jì)的存儲(chǔ)容量,讓?xiě)?yīng)用程序像使用普通文件系統(tǒng)一樣存儲(chǔ)大規(guī)模的文件數(shù)據(jù)。

1.2 設(shè)計(jì)目標(biāo)

文件以多副本的方式進(jìn)行存儲(chǔ):

 filel:node1 node2 node3
file2: node2 node3 node4
file3: node3 node4 node5
file4: node5 node6 node7

缺點(diǎn):

  • 不管文件多大,都存儲(chǔ)在一個(gè)節(jié)點(diǎn),在進(jìn)行數(shù)據(jù)處理時(shí),很難進(jìn)行并行處理,節(jié)點(diǎn)可能就成為網(wǎng)絡(luò)瓶頸,很難進(jìn)行大數(shù)據(jù)的處理。
  • 存儲(chǔ)負(fù)載很難均衡,每個(gè)節(jié)點(diǎn)的利用率很低。

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

  • 巨大的分布式文件系統(tǒng)。
  • 運(yùn)行在普通廉價(jià)的硬件。
  • 易擴(kuò)展、為用戶(hù)提供性能不錯(cuò)的文件存儲(chǔ)服務(wù)。

2 .如何設(shè)計(jì)一個(gè)分布式文件系統(tǒng)

HDFS的大容量存儲(chǔ)和高速訪(fǎng)問(wèn)的實(shí)現(xiàn)。

RAID將數(shù)據(jù)分片后,在多塊磁盤(pán)上并發(fā)進(jìn)行讀寫(xiě)訪(fǎng)問(wèn),提高了存儲(chǔ)容量、加快了訪(fǎng)問(wèn)速度,并通過(guò)數(shù)據(jù)冗余校驗(yàn)提高了數(shù)據(jù)可靠性,即使某塊磁盤(pán)損壞也不會(huì)丟數(shù)據(jù)。將RAID的設(shè)計(jì)理念擴(kuò)大到整個(gè)分布式服務(wù)器集群,就產(chǎn)生了分布式文件系統(tǒng),這便是Hadoop分布式文件系統(tǒng)的核心原理。

和RAID在多個(gè)磁盤(pán)上進(jìn)行文件存儲(chǔ)及并行讀寫(xiě)的思路一樣,HDFS是在一個(gè)大規(guī)模分布式服務(wù)器集群上,對(duì)數(shù)據(jù)分片后進(jìn)行并行讀寫(xiě)及冗余存儲(chǔ)。因?yàn)镠DFS可部署在一個(gè)大的服務(wù)器集群,集群中所有服務(wù)器的磁盤(pán)都可供HDFS使用,所以整個(gè)HDFS的存儲(chǔ)空間可以達(dá)到PB級(jí)。

HDFS是主從架構(gòu)。一個(gè)HDFS集群會(huì)有一個(gè)NameNode(命名節(jié)點(diǎn),簡(jiǎn)稱(chēng)NN),作為主服務(wù)器(master server)。

  • NameNode用于管理文件系統(tǒng)的命名空間以及調(diào)節(jié)客戶(hù)訪(fǎng)問(wèn)文件。
  • 還有多個(gè)DataNode(簡(jiǎn)稱(chēng)DN),數(shù)據(jù)節(jié)點(diǎn),作為從節(jié)點(diǎn)(slave server)存。
  • 通常每個(gè)集群中的DataNode,都會(huì)被NameNode所管理,DataNode用于存儲(chǔ)數(shù)據(jù)。

HDFS公開(kāi)了文件系統(tǒng)名稱(chēng)空間,允許用戶(hù)將數(shù)據(jù)存儲(chǔ)在文件中,就好比我們平時(shí)使用os中的文件系統(tǒng)一樣,用戶(hù)無(wú)需關(guān)心底層是如何存儲(chǔ)數(shù)據(jù)的。 在底層,一個(gè)文件會(huì)被分成一或多個(gè)數(shù)據(jù)塊,這些數(shù)據(jù)庫(kù)塊會(huì)被存儲(chǔ)在一組數(shù)據(jù)節(jié)點(diǎn)中。在CDH中數(shù)據(jù)塊的默認(rèn)128M。 在NameNode,可執(zhí)行文件系統(tǒng)的命名空間操作,如打開(kāi),關(guān)閉,重命名文件等。這也決定了數(shù)據(jù)塊到數(shù)據(jù)節(jié)點(diǎn)的映射。

HDFS被設(shè)計(jì)為可運(yùn)行在普通的廉價(jià)機(jī)器上,而這些機(jī)器通常運(yùn)行著一個(gè)Linux操作系統(tǒng)。一個(gè)典型的HDFS集群部署會(huì)有一個(gè)專(zhuān)門(mén)的機(jī)器只能運(yùn)行NameNode,而其他集群中的機(jī)器各自運(yùn)行一個(gè)DataNode實(shí)例。雖然一臺(tái)機(jī)器上也可以運(yùn)行多個(gè)節(jié)點(diǎn),但不推薦。

DataNode

  • 存儲(chǔ)用戶(hù)的文件對(duì)應(yīng)的數(shù)據(jù)塊(Block)
  • 會(huì)定期向NN發(fā)送心跳信息,匯報(bào)本身及其所有的block信息和健康狀況

負(fù)責(zé)文件數(shù)據(jù)的存儲(chǔ)和讀寫(xiě)操作,HDFS將文件數(shù)據(jù)分割成若干數(shù)據(jù)塊(Block),每個(gè)DataNode存儲(chǔ)一部分Block,這樣文件就分布存儲(chǔ)在整個(gè)HDFS服務(wù)器集群中。

應(yīng)用程序客戶(hù)端(Client)可并行訪(fǎng)問(wèn)這些Block,從而使得HDFS可以在服務(wù)器集群規(guī)模上實(shí)現(xiàn)數(shù)據(jù)并行訪(fǎng)問(wèn),極大提高訪(fǎng)問(wèn)速度。

HDFS集群的DataNode服務(wù)器會(huì)有很多臺(tái),一般在幾百臺(tái)到幾千臺(tái),每臺(tái)服務(wù)器配有數(shù)塊磁盤(pán),整個(gè)集群的存儲(chǔ)容量大概在幾PB~數(shù)百PB。

NameNode

  • 負(fù)責(zé)客戶(hù)端請(qǐng)求的響應(yīng)
  • 負(fù)責(zé)元數(shù)據(jù)(文件的名稱(chēng)、副本系數(shù)、Block存放的DN)的管理

負(fù)責(zé)整個(gè)分布式文件系統(tǒng)的元數(shù)據(jù)(MetaData)管理,即文件路徑名、數(shù)據(jù)塊的ID以及存儲(chǔ)位置等信息,類(lèi)似os中的文件分配表(FAT)。

HDFS為保證數(shù)據(jù)高可用,會(huì)將一個(gè)Block復(fù)制為多份(默認(rèn)3份),并將多份相同的Block存儲(chǔ)在不同服務(wù)器,甚至不同機(jī)架。當(dāng)有磁盤(pán)損壞或某個(gè)DataNode服務(wù)器宕機(jī),甚至某個(gè)交換機(jī)宕機(jī),導(dǎo)致其存儲(chǔ)的數(shù)據(jù)塊不能訪(fǎng)問(wèn)時(shí),客戶(hù)端會(huì)查找其備份Block訪(fǎng)問(wèn)。

3.S副本機(jī)制

HDFS中,一個(gè)文件會(huì)被拆分為一個(gè)或多個(gè)數(shù)據(jù)塊。默認(rèn)每個(gè)數(shù)據(jù)塊有三個(gè)副本,每個(gè)副本都存放在不同機(jī)器,而且每一個(gè)副本都有自己唯一的編號(hào):

Block多份復(fù)制存儲(chǔ)的示意圖

文件/users/sameerp/data/part-0的復(fù)制備份數(shù)設(shè)為2,存儲(chǔ)的BlockID分別為1、3:

  • Block1的兩個(gè)備份存儲(chǔ)在DataNode0和DataNode2兩個(gè)服務(wù)器上。
  • Block3的兩個(gè)備份存儲(chǔ)DataNode4和DataNode6兩個(gè)服務(wù)器上。

上述任一臺(tái)服務(wù)器宕機(jī)后,每個(gè)數(shù)據(jù)塊都至少還有一個(gè)備份存在,不會(huì)影響對(duì)文件/users/sameerp/data/part-0的訪(fǎng)問(wèn)。

和RAID一樣,數(shù)據(jù)分成若干Block后,存儲(chǔ)到不同服務(wù)器,實(shí)現(xiàn)數(shù)據(jù)大容量存儲(chǔ),并且不同分片的數(shù)據(jù)能并行進(jìn)行讀/寫(xiě)操作,實(shí)現(xiàn)數(shù)據(jù)的高速訪(fǎng)問(wèn)。

副本存放策略

副本存放:NameNode節(jié)點(diǎn)選擇一個(gè)DataNode節(jié)點(diǎn)去存儲(chǔ)block副本的過(guò)程,該過(guò)程的策略是在可靠性和讀寫(xiě)帶寬間權(quán)衡。

《Hadoop權(quán)威指南》中的默認(rèn)方式:

  • 第一個(gè)副本會(huì)隨機(jī)選擇,但是不會(huì)選擇存儲(chǔ)過(guò)滿(mǎn)的節(jié)點(diǎn)
  • 第二個(gè)副本放在和第一個(gè)副本不同且隨機(jī)選擇的機(jī)架
  • 第三個(gè)和第二個(gè)放在同一機(jī)架上的不同節(jié)點(diǎn)
  • 剩余副本完全隨機(jī)節(jié)點(diǎn)

合理性分析

  • 可靠性:block存儲(chǔ)在兩個(gè)機(jī)架
  • 寫(xiě)帶寬:寫(xiě)操作僅穿過(guò)一個(gè)網(wǎng)絡(luò)交換機(jī)
  • 讀操作:選擇其中一個(gè)機(jī)架去讀
  • block分布在整個(gè)集群

Google大數(shù)據(jù)“三駕馬車(chē)”的第一駕是GFS(Google 文件系統(tǒng)),而Hadoop的第一個(gè)產(chǎn)品是HDFS,分布式文件存儲(chǔ)是分布式計(jì)算的基礎(chǔ)。

這些年來(lái),各種計(jì)算框架、各種算法、各種應(yīng)用場(chǎng)景不斷推陳出新,但大數(shù)據(jù)存儲(chǔ)的王者依然是HDFS。

5.HDFS的高可用設(shè)計(jì)

5.1 數(shù)據(jù)存儲(chǔ)故障容錯(cuò)

磁盤(pán)介質(zhì)在存儲(chǔ)過(guò)程中受環(huán)境或者老化影響,其存儲(chǔ)的數(shù)據(jù)可能會(huì)出現(xiàn)錯(cuò)亂。

HDFS對(duì)存儲(chǔ)在DataNode上的數(shù)據(jù)塊,計(jì)算并存儲(chǔ)校驗(yàn)和(CheckSum)。在讀數(shù)據(jù)時(shí),重新計(jì)算讀取出來(lái)的數(shù)據(jù)的校驗(yàn)和,校驗(yàn)不正確就拋異常,應(yīng)用程序捕獲異常后就到其他DataNode上讀取備份數(shù)據(jù)。

5.2 磁盤(pán)故障容錯(cuò)

DataNode監(jiān)測(cè)到本機(jī)的某塊磁盤(pán)損壞,就將該塊磁盤(pán)上存儲(chǔ)的所有BlockID報(bào)告給NameNode,NameNode檢查這些數(shù)據(jù)塊還在哪些DataNode上有備份,通知相應(yīng)的DataNode服務(wù)器將對(duì)應(yīng)的數(shù)據(jù)塊復(fù)制到其他服務(wù)器上,以保證數(shù)據(jù)塊的備份數(shù)滿(mǎn)足要求。

5.3 DataNode故障容錯(cuò)

DataNode會(huì)通過(guò)心跳和NameNode保持通信,如果DataNode超時(shí)未發(fā)送心跳,NameNode就會(huì)認(rèn)為這個(gè)DataNode已經(jīng)宕機(jī)失效,立即查找這個(gè)DataNode上存儲(chǔ)的數(shù)據(jù)塊有哪些,以及這些數(shù)據(jù)塊還存儲(chǔ)在哪些服務(wù)器上,隨后通知這些服務(wù)器再?gòu)?fù)制一份數(shù)據(jù)塊到其他服務(wù)器上,保證HDFS存儲(chǔ)的數(shù)據(jù)塊備份數(shù)符合用戶(hù)設(shè)置的數(shù)目,即使再出現(xiàn)服務(wù)器宕機(jī),也不會(huì)丟失數(shù)據(jù)。

5.4 NameNode故障容錯(cuò)

NameNode是整個(gè)HDFS的核心,記錄著HDFS文件分配表信息,所有的文件路徑和數(shù)據(jù)塊存儲(chǔ)信息都保存在NameNode,如果NameNode故障,整個(gè)HDFS系統(tǒng)集群都無(wú)法使用;如果NameNode上記錄的數(shù)據(jù)丟失,整個(gè)集群所有DataNode存儲(chǔ)的數(shù)據(jù)也就沒(méi)用了。

所以,NameNode高可用容錯(cuò)能力非常重要。NameNode采用主從熱備的方式提供高可用服務(wù):

集群部署兩臺(tái)NameNode服務(wù)器:

  • 一臺(tái)作為主服務(wù)器提供服務(wù)
  • 一臺(tái)作為從服務(wù)器進(jìn)行熱備

兩臺(tái)服務(wù)器通過(guò)Zk選舉,主要是通過(guò)爭(zhēng)奪znode鎖資源,決定誰(shuí)是主服務(wù)器。而DataNode則會(huì)向兩個(gè)NameNode同時(shí)發(fā)送心跳數(shù)據(jù),但是只有主NameNode才能向DataNode返回控制信息。

正常運(yùn)行期,主從NameNode之間通過(guò)一個(gè)共享存儲(chǔ)系統(tǒng)shared edits來(lái)同步文件系統(tǒng)的元數(shù)據(jù)信息。當(dāng)主NameNode服務(wù)器宕機(jī),從NameNode會(huì)通過(guò)ZooKeeper升級(jí)成為主服務(wù)器,并保證HDFS集群的元數(shù)據(jù)信息,也就是文件分配表信息完整一致。

軟件系統(tǒng),性能差點(diǎn),用戶(hù)也許可接受;使用體驗(yàn)差,也許也能忍受。但若可用性差,經(jīng)常出故障不可用,就麻煩了;如果出現(xiàn)重要數(shù)據(jù)丟失,那開(kāi)發(fā)攤上大事。

而分布式系統(tǒng)可能出故障地方又非常多,內(nèi)存、CPU、主板、磁盤(pán)會(huì)損壞,服務(wù)器會(huì)宕機(jī),網(wǎng)絡(luò)會(huì)中斷,機(jī)房會(huì)停電,所有這些都可能會(huì)引起軟件系統(tǒng)的不可用,甚至數(shù)據(jù)永久丟失。

所以在設(shè)計(jì)分布式系統(tǒng)的時(shí)候,軟件工程師一定要繃緊可用性這根弦,思考在各種可能的故障情況下,如何保證整個(gè)軟件系統(tǒng)依然是可用的。

6.保證系統(tǒng)可用性的策略

冗余備份

任何程序、任何數(shù)據(jù),都至少要有一個(gè)備份,也就是說(shuō)程序至少要部署到兩臺(tái)服務(wù)器,數(shù)據(jù)至少要備份到另一臺(tái)服務(wù)器上。此外,稍有規(guī)模的互聯(lián)網(wǎng)企業(yè)都會(huì)建設(shè)多個(gè)數(shù)據(jù)中心,數(shù)據(jù)中心之間互相進(jìn)行備份,用戶(hù)請(qǐng)求可能會(huì)被分發(fā)到任何一個(gè)數(shù)據(jù)中心,即所謂的異地多活,在遭遇地域性的重大故障和自然災(zāi)害的時(shí)候,依然保證應(yīng)用的高可用。

失效轉(zhuǎn)移

當(dāng)要訪(fǎng)問(wèn)的程序或者數(shù)據(jù)無(wú)法訪(fǎng)問(wèn)時(shí),需要將訪(fǎng)問(wèn)請(qǐng)求轉(zhuǎn)移到備份的程序或者數(shù)據(jù)所在的服務(wù)器上,這也就是失效轉(zhuǎn)移。失效轉(zhuǎn)移你應(yīng)該注意的是失效的鑒定,像NameNode這樣主從服務(wù)器管理同一份數(shù)據(jù)的場(chǎng)景,如果從服務(wù)器錯(cuò)誤地以為主服務(wù)器宕機(jī)而接管集群管理,會(huì)出現(xiàn)主從服務(wù)器一起對(duì)DataNode發(fā)送指令,進(jìn)而導(dǎo)致集群混亂,也就是所謂的“腦裂”。這也是這類(lèi)場(chǎng)景選舉主服務(wù)器時(shí),引入ZooKeeper的原因。ZooKeeper的工作原理,我將會(huì)在后面專(zhuān)門(mén)分析。

降級(jí)

當(dāng)大量的用戶(hù)請(qǐng)求或者數(shù)據(jù)處理請(qǐng)求到達(dá)的時(shí)候,由于計(jì)算資源有限,可能無(wú)法處理如此大量的請(qǐng)求,進(jìn)而導(dǎo)致資源耗盡,系統(tǒng)崩潰。這種情況下,可以拒絕部分請(qǐng)求,即進(jìn)行限流;也可以關(guān)閉部分功能,降低資源消耗,即進(jìn)行降級(jí)。限流是互聯(lián)網(wǎng)應(yīng)用的常備功能,因?yàn)槌鲐?fù)載能力的訪(fǎng)問(wèn)流量在何時(shí)會(huì)突然到來(lái),你根本無(wú)法預(yù)料,所以必須提前做好準(zhǔn)備,當(dāng)遇到突發(fā)高峰流量時(shí),就可以立即啟動(dòng)限流。而降級(jí)通常是為可預(yù)知的場(chǎng)景準(zhǔn)備的,比如電商的“雙十一”促銷(xiāo),為了保障促銷(xiāo)活動(dòng)期間應(yīng)用的核心功能能夠正常運(yùn)行,比如下單功能,可以對(duì)系統(tǒng)進(jìn)行降級(jí)處理,關(guān)閉部分非重要功能,比如商品評(píng)價(jià)功能。

總結(jié)

HDFS是如何通過(guò)大規(guī)模分布式服務(wù)器集群實(shí)現(xiàn)數(shù)據(jù)的大容量、高速、可靠存儲(chǔ)、訪(fǎng)問(wèn)的。

  1. 文件數(shù)據(jù)以數(shù)據(jù)塊的方式進(jìn)行切分,數(shù)據(jù)塊可以存儲(chǔ)在集群任意DataNode服務(wù)器上,所以HDFS存儲(chǔ)的文件可以非常大,一個(gè)文件理論上可以占據(jù)整個(gè)HDFS服務(wù)器集群上的所有磁盤(pán),實(shí)現(xiàn)了大容量存儲(chǔ)。
  2. HDFS一般的訪(fǎng)問(wèn)模式是通過(guò)MapReduce程序在計(jì)算時(shí)讀取,MapReduce對(duì)輸入數(shù)據(jù)進(jìn)行分片讀取,通常一個(gè)分片就是一個(gè)數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊分配一個(gè)計(jì)算進(jìn)程,這樣就可以同時(shí)啟動(dòng)很多進(jìn)程對(duì)一個(gè)HDFS文件的多個(gè)數(shù)據(jù)塊進(jìn)行并發(fā)訪(fǎng)問(wèn),從而實(shí)現(xiàn)數(shù)據(jù)的高速訪(fǎng)問(wèn)。關(guān)于MapReduce的具體處理過(guò)程,我們會(huì)在專(zhuān)欄后面詳細(xì)討論。
  3. DataNode存儲(chǔ)的數(shù)據(jù)塊會(huì)進(jìn)行復(fù)制,使每個(gè)數(shù)據(jù)塊在集群里有多個(gè)備份,保證了數(shù)據(jù)的可靠性,并通過(guò)一系列的故障容錯(cuò)手段實(shí)現(xiàn)HDFS系統(tǒng)中主要組件的高可用,進(jìn)而保證數(shù)據(jù)和整個(gè)系統(tǒng)的高可用。


責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2012-08-23 10:31:37

2016-03-01 11:40:02

SaaS網(wǎng)絡(luò)效應(yīng)生態(tài)系統(tǒng)創(chuàng)建

2021-06-15 17:13:20

數(shù)據(jù)存儲(chǔ)硬盤(pán)固態(tài)盤(pán)

2019-09-26 09:00:31

Java編程語(yǔ)言

2022-08-12 15:59:18

區(qū)塊鏈加密貨幣系統(tǒng)

2021-03-15 08:40:46

數(shù)據(jù)分析波動(dòng)

2017-02-27 16:35:00

HDFS大數(shù)據(jù)分析

2023-03-16 19:23:39

2015-05-20 09:52:47

2024-01-30 01:12:37

自然語(yǔ)言時(shí)間序列預(yù)測(cè)Pytorch

2022-02-16 16:09:12

鴻蒙游戲操作系統(tǒng)

2015-07-27 15:27:11

程序員重寫(xiě)代碼

2020-12-18 17:06:50

Windows工具開(kāi)源

2021-01-25 22:04:30

WindowsCoodesker工具

2021-12-01 15:21:14

程序員技能互聯(lián)網(wǎng)

2016-02-29 11:54:11

手機(jī)屏幕尺寸iPone5se

2017-11-20 08:13:26

大數(shù)據(jù)大數(shù)據(jù)技術(shù)數(shù)據(jù)

2021-11-30 09:51:19

微軟操作系統(tǒng)Windows

2022-08-09 08:02:36

Python人物關(guān)系紅樓夢(mèng)

2014-10-08 09:33:25

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)