溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

hadoop設(shè)計(jì)思路和目標(biāo)

發(fā)布時(shí)間:2020-10-26 08:18:36 來(lái)源:網(wǎng)絡(luò) 閱讀:4378 作者:kai404 欄目:大數(shù)據(jù)

本文主要是作者自己的學(xué)習(xí)過(guò)程,主要是對(duì)原文的翻譯及理解,某些地方根據(jù)自己的理解,在表述上稍做些改動(dòng),以便更易于理解。
官方原文


hdfs與現(xiàn)有的分布式文件系統(tǒng)有許多相似之處。但是,與其他分布式文件系統(tǒng)的區(qū)別非常明顯。HDFS是高度容錯(cuò)的,設(shè)計(jì)用于部署在低成本硬件上。HDFS提供對(duì)應(yīng)用程序數(shù)據(jù)的高吞吐量訪問(wèn),適用于具有大數(shù)據(jù)集的應(yīng)用程序。HDFS放寬了一些POSIX要求,以支持對(duì)文件系統(tǒng)數(shù)據(jù)的流式訪問(wèn)。

硬件故障

首先明確:硬件故障是常態(tài)而不是意外。檢測(cè)到錯(cuò)誤并且自動(dòng)的,快速的恢復(fù)是hdfs的核心架構(gòu)目標(biāo)

流式數(shù)據(jù)訪問(wèn)

運(yùn)行在HDFS上的應(yīng)用程序需要對(duì)其數(shù)據(jù)集進(jìn)行流訪問(wèn)。它們不是通常在通用文件系統(tǒng)上運(yùn)行的通用應(yīng)用程序。HDFS更多的是為批處理而設(shè)計(jì)的,而不是用戶(hù)的交互使用。重點(diǎn)是數(shù)據(jù)訪問(wèn)的高吞吐量,而不是數(shù)據(jù)訪問(wèn)的低延遲。POSIX強(qiáng)加了許多針對(duì)HDFS的應(yīng)用程序不需要的硬需求

大數(shù)據(jù)集

運(yùn)行在HDFS上的應(yīng)用程序擁有大型數(shù)據(jù)集。HDFS中的一個(gè)典型文件的大小是gb到tb。因此,HDFS被調(diào)優(yōu)為支持大文件。它應(yīng)該提供高聚合數(shù)據(jù)帶寬,并可擴(kuò)展到單個(gè)集群中的數(shù)百個(gè)節(jié)點(diǎn)。它應(yīng)該在一個(gè)實(shí)例中支持?jǐn)?shù)千萬(wàn)個(gè)文件。

簡(jiǎn)單一致性模型

HDFS應(yīng)用需要文件的write-once-read-many訪問(wèn)模型。文件一旦被創(chuàng)建,寫(xiě)和關(guān)閉操作出了追加和截?cái)?,無(wú)需修改操作。支持將內(nèi)容附加到文件末尾,但不能在任意點(diǎn)進(jìn)行更新。這個(gè)假設(shè)簡(jiǎn)化了數(shù)據(jù)一致性問(wèn)題,并支持高吞吐量數(shù)據(jù)訪問(wèn)。MapReduce應(yīng)用程序或web爬蟲(chóng)應(yīng)用程序非常適合這個(gè)模型。

移動(dòng)計(jì)算比移動(dòng)數(shù)據(jù)廉價(jià)

如果應(yīng)用程序請(qǐng)求的計(jì)算在其操作的數(shù)據(jù)附近執(zhí)行,那么它的效率會(huì)高得多。當(dāng)數(shù)據(jù)集的大小很大時(shí)尤其如此。這將最小化網(wǎng)絡(luò)擁塞,并提高系統(tǒng)的總體吞吐量。這里的假設(shè)是,將計(jì)算遷移到離數(shù)據(jù)更近的地方通常比將數(shù)據(jù)遷移到應(yīng)用程序運(yùn)行的地方要好。HDFS為應(yīng)用提供接口來(lái)移動(dòng)他們自己以達(dá)到離數(shù)據(jù)所在的位置更近。

跨異構(gòu)硬件和軟件平臺(tái)的可移植性

HDFS被設(shè)計(jì)成易于從一個(gè)平臺(tái)移植到另一個(gè)平臺(tái)。這有助于廣泛采用HDFS作為一組大型應(yīng)用程序的首選平臺(tái)。

NameNode and DataNodes

HDFS有一個(gè)主/從架構(gòu)。HDFS集群由一個(gè)NameNode(可選secondary NameNode),NameNode是一個(gè)主服務(wù)器,它管理文件系統(tǒng)名稱(chēng)空間控制客戶(hù)機(jī)對(duì)文件的訪問(wèn)。此外,還有許多datanode,通常是集群中的每個(gè)物理節(jié)點(diǎn)一個(gè)datanode,它們管理附加到它們所運(yùn)行的物理節(jié)點(diǎn)上的存儲(chǔ)設(shè)備。HDFS對(duì)外暴露一個(gè)文件系統(tǒng)名稱(chēng)空間,并允許將用戶(hù)數(shù)據(jù)存儲(chǔ)在文件中。在內(nèi)部,一個(gè)文件被分成一個(gè)或多個(gè)塊,這些塊存儲(chǔ)在一組DataNode中。NameNode執(zhí)行namespace operations,如打開(kāi)、關(guān)閉和重命名文件和目錄。它還決定塊到數(shù)據(jù)塊(blocks)和數(shù)據(jù)節(jié)點(diǎn)(DataNodes)間的映射。DataNodes 負(fù)責(zé)處理來(lái)自文件系統(tǒng)客戶(hù)端讀和寫(xiě)請(qǐng)求。DataNodes還根據(jù)來(lái)自NameNode的指令執(zhí)行塊的創(chuàng)建、刪除和復(fù)制。
hadoop設(shè)計(jì)思路和目標(biāo)
集群中單個(gè)NameNode的存在極大地簡(jiǎn)化了系統(tǒng)的體系結(jié)構(gòu)。NameNode是所有HDFS元數(shù)據(jù)的仲裁器和存儲(chǔ)庫(kù)。系統(tǒng)以這樣的方式設(shè)計(jì),用戶(hù)數(shù)據(jù)本身永遠(yuǎn)不會(huì)流經(jīng)NameNode。

The File System Namespace

HDFS支持傳統(tǒng)的分層文件組織。用戶(hù)或應(yīng)用程序可以在這些目錄中創(chuàng)建目錄并存儲(chǔ)文件。文件系統(tǒng)名稱(chēng)空間層次結(jié)構(gòu)與大多數(shù)現(xiàn)有文件系統(tǒng)相似;可以創(chuàng)建和刪除文件,將文件從一個(gè)目錄移動(dòng)到另一個(gè)目錄,或者重命名文件。HDFS支持用戶(hù)配額和訪問(wèn)權(quán)限。HDFS不支持硬鏈接或軟鏈接。然而,HDFS體系結(jié)構(gòu)并不排除實(shí)現(xiàn)這些特性。
NameNode維護(hù)文件系統(tǒng)名稱(chēng)空間。對(duì)文件系統(tǒng)名稱(chēng)空間或其屬性的任何更改都由NameNode記錄。應(yīng)用程序可以指定HDFS應(yīng)該維護(hù)的文件副本的數(shù)量。一個(gè)文件的拷貝數(shù)稱(chēng)為該文件的復(fù)制因子。此信息由NameNode存儲(chǔ)。

Data Replication

HDFS的設(shè)計(jì)目的是在跨機(jī)器的大型集群中可靠地存儲(chǔ)非常大的文件。它將每個(gè)文件存儲(chǔ)為一系列塊(block)。復(fù)制文件的塊是為了容錯(cuò)。每個(gè)文件都可以配置塊大小復(fù)制因子。

除了最后一個(gè)塊之外,文件中的所有塊大小都相同,而用戶(hù)可以在appendhsync中添加了對(duì)可變長(zhǎng)度塊的支持之后,啟動(dòng)一個(gè)新塊,而不需要將最后一個(gè)塊填充到所配置的塊大小。

應(yīng)用程序可以指定文件的副本數(shù)量。復(fù)制因子可以在文件創(chuàng)建時(shí)指定,稍后可以更改。HDFS中的文件是寫(xiě)一次的(除了追加和截?cái)?,并且任何時(shí)候只有一個(gè)writer。

NameNode做出關(guān)于復(fù)制塊的所有決策。它定期從集群中的每個(gè)數(shù)據(jù)節(jié)點(diǎn)接收心跳和塊報(bào)告。接收到心跳意味著DataNode正常工作。塊報(bào)告包含DataNode上的所有塊的列表。

Replica Placement: The First Baby Steps

副本的位置對(duì)HDFS的可靠性和性能至關(guān)重要。經(jīng)過(guò)優(yōu)化的副本位置使HDFS區(qū)別于大多數(shù)其他分布式文件系統(tǒng)。.....

NameNode通過(guò)Hadoop 機(jī)架感知中概述的過(guò)程確定每個(gè)DataNode所屬的機(jī)架id。一個(gè)簡(jiǎn)單但非最優(yōu)的策略是將副本放在各個(gè)唯一的機(jī)架上。這可以防止在某個(gè)機(jī)架整體發(fā)生故障時(shí)丟失數(shù)據(jù),并允許在讀取數(shù)據(jù)時(shí)使用多個(gè)機(jī)架的帶寬。該策略在集群中均勻分布副本,這使得在組件發(fā)生故障時(shí)很容易平衡負(fù)載。但是,這個(gè)策略增加了寫(xiě)的成本,因?yàn)閷?xiě)需要將塊轉(zhuǎn)移到多個(gè)機(jī)架。

為了最小化全局帶寬消耗和讀取延遲,HDFS嘗試滿(mǎn)足來(lái)自最接近讀取器的副本的讀取請(qǐng)求。如果在與讀取器節(jié)點(diǎn)相同的機(jī)架上存在一個(gè)副本,則首選該副本來(lái)滿(mǎn)足讀取請(qǐng)求。如果HDFS集群跨越多個(gè)數(shù)據(jù)中心,則首選駐留在本地?cái)?shù)據(jù)中心的副本,而不是任何遠(yuǎn)程副本。

一般情況下,當(dāng)復(fù)制因子是3時(shí),HDFS的放置策略是:

  1. 將一個(gè)副本放在本機(jī)如果寫(xiě)入者位于一個(gè)datanode上,否則就放置在一個(gè)隨機(jī)的datanode
  2. 另一個(gè)副本放置在一個(gè)不同的機(jī)架上的datanode
  3. 最后一個(gè)副本放置在和2相同機(jī)架的另一個(gè)datanode

這個(gè)策略減少了機(jī)架間的寫(xiě)流量,這通??梢蕴岣邔?xiě)性能。整個(gè)機(jī)架失效的概率要遠(yuǎn)小于某個(gè)節(jié)點(diǎn)失效的概率,因此該策略并不影響對(duì)數(shù)據(jù)可靠性和可用性的保證。但是,它確減少了讀取數(shù)據(jù)時(shí)使用的聚合網(wǎng)絡(luò)帶寬,因?yàn)橐粋€(gè)塊只放在兩個(gè)而不是三個(gè)機(jī)架中。使用此策略,文件的副本不會(huì)均勻地分布在機(jī)架上。三分之一的副本在一個(gè)節(jié)點(diǎn)上,三分之二的副本在一個(gè)機(jī)架上,另外三分之一均勻地分布在剩余的機(jī)架上。該策略在不影響數(shù)據(jù)可靠性或讀取性能的情況下提高了寫(xiě)性能。

如果復(fù)制因子大于3,那么第4個(gè)以及后續(xù)的副本將隨機(jī)選擇datanode放置,但是每個(gè)節(jié)點(diǎn)的副本數(shù)量有限制(基本上是(replicas - 1) / racks + 2)

因?yàn)镹ameNode不允許數(shù)據(jù)陽(yáng)極具有相同塊的多個(gè)副本,所以創(chuàng)建的最大副本數(shù)量是當(dāng)時(shí)的datanode總數(shù)。

在向HDFS添加了對(duì)Storage Types and Storage Policies的支持之后,除了上面描述的機(jī)架感知之外,NameNode還考慮這兩種策略。NameNode首先根據(jù)機(jī)架感知選擇節(jié)點(diǎn),然后檢查候選節(jié)點(diǎn)是否具有與文件關(guān)聯(lián)的策略所需的存儲(chǔ)空間。如果候選節(jié)點(diǎn)沒(méi)有存儲(chǔ)類(lèi)型,則NameNode將查找另一個(gè)節(jié)點(diǎn)。 If enough nodes to place replicas can not be found in the first path, the NameNode looks for nodes having fallback storage types in the second path.

Replica Selection

總體而言就近讀
為了最小化全局帶寬消耗和讀取延遲,HDFS嘗試滿(mǎn)足來(lái)自最接近讀取器的副本的讀取請(qǐng)求。如果在與讀取器節(jié)點(diǎn)相同的機(jī)架上存在一個(gè)副本,則首選該副本來(lái)滿(mǎn)足讀取請(qǐng)求。如果HDFS集群跨越多個(gè)數(shù)據(jù)中心,則首選駐留在本地?cái)?shù)據(jù)中心的副本,而不是任何遠(yuǎn)程副本。

Safemode

在啟動(dòng)時(shí),NameNode進(jìn)入一個(gè)稱(chēng)為Safemode的特殊狀態(tài)。當(dāng)NameNode處于Safemode狀態(tài)時(shí),不會(huì)發(fā)生數(shù)據(jù)塊的復(fù)制。NameNode接收來(lái)自datanode的心跳和塊報(bào)告消息。塊報(bào)告包含DataNode托管的數(shù)據(jù)塊列表。每個(gè)塊都有指定的最小數(shù)量的副本。當(dāng)NameNode檢查到一個(gè)數(shù)據(jù)塊已經(jīng)達(dá)到它所指定的最小副本數(shù)時(shí)就認(rèn)為該數(shù)據(jù)塊已經(jīng)安全復(fù)制。在達(dá)到一個(gè)可配置的“已安全復(fù)制的數(shù)據(jù)塊”的百分比之后(再加上30秒),NameNode退出Safemode狀態(tài)。然后,NameNode檢查仍然小于指定副本數(shù)的數(shù)據(jù)塊列表(如果有的話),并將這些塊復(fù)制到其他datanode。

The Persistence of File System Metadata

HDFS名稱(chēng)空間由NameNode存儲(chǔ)。NameNode使用名為EditLog的事務(wù)日志持久地記錄文件系統(tǒng)元數(shù)據(jù)中發(fā)生的每個(gè)更改。例如,在HDFS中創(chuàng)建一個(gè)新文件會(huì)導(dǎo)致NameNode將一條記錄插入到表明這一點(diǎn)的EditLog中。類(lèi)似地,更改文件的復(fù)制因子會(huì)將一條新記錄插入EditLog。NameNode使用其本地主機(jī)OS文件系統(tǒng)中的一個(gè)文件來(lái)存儲(chǔ)EditLog。整個(gè)文件系統(tǒng)名稱(chēng)空間(包括塊到文件的映射和文件系統(tǒng)屬性)存儲(chǔ)在一個(gè)名為FsImage的文件中。FsImage也作為文件存儲(chǔ)在NameNode的本地文件系統(tǒng)中。

NameNode在內(nèi)存中保存整個(gè)文件系統(tǒng)名稱(chēng)空間和文件塊映射的鏡像。當(dāng)NameNode啟動(dòng)時(shí),或者一個(gè)檢查點(diǎn)(checkpoint)被一個(gè)可配置的閾值觸發(fā)時(shí),它從磁盤(pán)讀取FsImage和EditLog,將EditLog中的所有事務(wù)應(yīng)用于FsImage的內(nèi)存鏡像,并將這個(gè)新版本刷新到磁盤(pán)上的一個(gè)新FsImage中。然后,它可以截?cái)啵╰runcate)舊的EditLog,因?yàn)樗氖聞?wù)已應(yīng)用于持久FsImage。這個(gè)過(guò)程稱(chēng)為checkpoint。checkpoint的目的是通過(guò)獲取文件系統(tǒng)元數(shù)據(jù)快照并將其保存到FsImage,確保HDFS具有文件系統(tǒng)元數(shù)據(jù)的一致視圖。盡管讀取FsImage是有效的,但是直接對(duì)FsImage進(jìn)行增量編輯是無(wú)效的。我們不為每次編輯修改FsImage,而是將編輯保存在Editlog中。在檢查點(diǎn)期間,Editlog中的更改應(yīng)用于FsImage。檢查點(diǎn)可以在給定的時(shí)間間隔(以秒為單位表示的dfs.namenode.checkpoint.period),或者在積累了給定數(shù)量的文件系統(tǒng)事務(wù)之后(dfs.namenode.checkpoint.txns)觸發(fā)。如果設(shè)置了這兩個(gè)屬性,則第一個(gè)達(dá)到的閾值將觸發(fā)檢查點(diǎn)。

DataNode將HDFS數(shù)據(jù)存儲(chǔ)在本地文件系統(tǒng)中的文件中。DataNode不知道HDFS文件。它將每個(gè)HDFS數(shù)據(jù)塊存儲(chǔ)在本地文件系統(tǒng)中的一個(gè)單獨(dú)文件中。DataNode不會(huì)在同一個(gè)目錄中創(chuàng)建所有文件。相反,它使用啟發(fā)式的策略來(lái)確定每個(gè)目錄的最優(yōu)文件數(shù)量,并適當(dāng)?shù)貏?chuàng)建子目錄。在同一個(gè)目錄中創(chuàng)建所有本地文件不是最優(yōu)的,因?yàn)楸镜匚募到y(tǒng)可能無(wú)法有效地支持單個(gè)目錄中的大量文件。當(dāng)DataNode啟動(dòng)時(shí),它掃描本地文件系統(tǒng),生成與每個(gè)本地文件對(duì)應(yīng)的所有HDFS數(shù)據(jù)塊的列表,并將該報(bào)告發(fā)送給NameNode。該報(bào)告稱(chēng)為Blockreport

The Communication Protocols

所有HDFS通信協(xié)議都位于TCP/IP協(xié)議之上??蛻?hù)端建立鏈接到NameNode上的可配置TCP端口,它使用ClientProtocol與NameNode通信。DataNode使用DataNode Protocol與NameNode通信。遠(yuǎn)程過(guò)程調(diào)用(RPC)抽象封裝了Client ProtocolDataNode Protocol。按照設(shè)計(jì),NameNode從不啟動(dòng)任何rpc。相反,它只響應(yīng)由datanode或客戶(hù)端發(fā)出的RPC請(qǐng)求。

Robustness 健壯性

HDFS的主要目標(biāo)是即使在出現(xiàn)故障時(shí)也能可靠地存儲(chǔ)數(shù)據(jù)。常見(jiàn)的三種故障類(lèi)型是NameNode故障、DataNode故障network partitions。

Data Disk Failure, Heartbeats and Re-Replication

每個(gè)DataNode定期向NameNode發(fā)送一條心跳消息。網(wǎng)絡(luò)分區(qū)(network partition)可能導(dǎo)致部分DataNodes與NameNode失去連接。NameNode通過(guò)Heartbeat message的缺席來(lái)檢測(cè)這種情況。NameNode將沒(méi)有心跳的DataNode標(biāo)記為死節(jié)點(diǎn),并且不向它們轉(zhuǎn)發(fā)任何新的IO請(qǐng)求。已注冊(cè)到死DataNode的任何數(shù)據(jù)都不再對(duì)HDFS可用。DataNode死亡可能導(dǎo)致某些數(shù)據(jù)塊的復(fù)制因子低于指定值。NameNode不斷跟蹤需要復(fù)制哪些塊,并在必要時(shí)啟動(dòng)復(fù)制。重新復(fù)制的必要性可能由許多原因引起:DataNode可能不可用,副本可能損壞,DataNode上的硬盤(pán)可能失敗,或者文件的復(fù)制因子可能增加。

將DataNodes標(biāo)記為死亡的時(shí)限謹(jǐn)慎的設(shè)置的比較長(zhǎng)(默認(rèn)超過(guò)10分鐘),以避免由于DataNode狀態(tài)抖動(dòng)而引起的復(fù)制風(fēng)暴。用戶(hù)可以設(shè)置更短的間隔,將datanode標(biāo)記為陳舊的節(jié)點(diǎn),并避免在配置為性能敏感的工作負(fù)載時(shí)在陳舊數(shù)據(jù)節(jié)點(diǎn)上讀或?qū)?/strong>(待深入理解 Users can set shorter interval to mark DataNodes as stale and avoid stale nodes on reading and/or writing by configuration for performance sensitive workloads.)

Cluster Rebalancing

HDFS體系結(jié)構(gòu)與數(shù)據(jù)rebalancing方案兼容。如果DataNode上的空閑空間低于某個(gè)閾值,則方案可能會(huì)自動(dòng)將數(shù)據(jù)從一個(gè)DataNode移動(dòng)到另一個(gè)DataNode。In the event of a sudden high demand for a particular file, a scheme might dynamically create additional replicas and rebalance other data in the cluster. These types of data rebalancing schemes are not yet implemented.

Data Integrity

從DataNode獲取的數(shù)據(jù)塊可能損壞。這種損壞可能由于存儲(chǔ)設(shè)備、網(wǎng)絡(luò)故障或有bug的軟件中的錯(cuò)誤而發(fā)生。HDFS客戶(hù)端軟件實(shí)現(xiàn)對(duì)HDFS文件內(nèi)容的校驗(yàn)和檢查。當(dāng)客戶(hù)端創(chuàng)建HDFS文件時(shí),它計(jì)算該文件的每個(gè)塊的校驗(yàn)和,并將這些校驗(yàn)和存儲(chǔ)在相同HDFS名稱(chēng)空間中的一個(gè)單獨(dú)的隱藏文件中。當(dāng)客戶(hù)機(jī)檢索文件內(nèi)容時(shí),它驗(yàn)證從每個(gè)DataNode接收到的數(shù)據(jù)是否與存儲(chǔ)在關(guān)聯(lián)校驗(yàn)和文件中的校驗(yàn)和匹配。如果沒(méi)有,則客戶(hù)端可以選擇從具有該塊副本的另一個(gè)DataNode檢索該塊。

文件快和校驗(yàn)文件
[root@datanode04 ~]# ll -h /data/hadoop/tmp/dfs/data/current/BP-855898234-106.66.38.101-1483934264653/current/finalized//subdir116/subdir82
total 835M
-rw-rw-r-- 1 hadoop hadoop  50M May  3 05:01 blk_1114919483
-rw-rw-r-- 1 hadoop hadoop 393K May  3 05:01 blk_1114919483_41260856.meta
-rw-rw-r-- 1 hadoop hadoop  49M May  3 05:01 blk_1114919485
-rw-rw-r-- 1 hadoop hadoop 392K May  3 05:01 blk_1114919485_41260858.meta
... ...
Metadata Disk Failure

FsImage和EditLog是HDFS的中心數(shù)據(jù)結(jié)構(gòu)。這些文件的損壞可能導(dǎo)致HDFS實(shí)例不可用。因此,可以將NameNode配置為支持維護(hù)FsImage和EditLog的多個(gè)副本。對(duì)FsImage或EditLog的任何更新都會(huì)導(dǎo)致同步更新每個(gè)FsImage和EditLog。FsImage和EditLog的多個(gè)副本的同步更新可能會(huì)降低NameNode每秒可以支持的namespace事務(wù)的速度。但是,這種損失是可以接受的,因?yàn)榧词笻DFS應(yīng)用程序本質(zhì)上是數(shù)據(jù)密集型的,但它們不是元數(shù)據(jù)密集型的。當(dāng)NameNode重新啟動(dòng)時(shí),它選擇最新一致的FsImage和EditLog來(lái)使用。

提高故障恢復(fù)能力的另一個(gè)選項(xiàng)是使用多個(gè)namenode, shared storage on NFS 或使用distributed edit log (稱(chēng)為Journal)啟用高可用性。后者是推薦的方法。

Data Organization

Data Blocks

HDFS被設(shè)計(jì)成支持非常大的文件。與HDFS兼容的應(yīng)用程序也是那些處理大數(shù)據(jù)集的應(yīng)用程序。這些應(yīng)用程序只寫(xiě)他們的數(shù)據(jù)一次,但他們讀取它一次或多次,并要求這些讀取滿(mǎn)足流速度。HDFS支持文件上的write-once-read-many語(yǔ)義。HDFS使用的典型塊大小為128mb,因此,HDFS文件被分割成128mb的塊,如果可能,每個(gè)塊將駐留在不同的DataNode上。

Replication Pipelining

當(dāng)客戶(hù)機(jī)將數(shù)據(jù)寫(xiě)入復(fù)制因子為3的HDFS文件時(shí),NameNode使用“復(fù)制目標(biāo)選擇算法”獲取目標(biāo)DataNodes列表。此列表包含將承載該數(shù)據(jù)塊塊副本的datanode。然后客戶(hù)端寫(xiě)入第一個(gè)DataNode。第一個(gè)DataNode開(kāi)始接收被切分成塊的數(shù)據(jù),將每個(gè)塊寫(xiě)入它的本地存儲(chǔ)庫(kù)(本地文件系統(tǒng)),并將該部分?jǐn)?shù)據(jù)傳輸?shù)搅斜碇械牡诙€(gè)DataNode。然后,第二個(gè)DataNode開(kāi)始接收數(shù)據(jù)塊的每個(gè)部分,將該部分寫(xiě)到它的存儲(chǔ)庫(kù)中,然后將該部分刷新到第三個(gè)DataNode。最后,第三個(gè)DataNode將數(shù)據(jù)寫(xiě)入其本地存儲(chǔ)庫(kù)。因此,DataNode可以從管道中的前一個(gè)接收數(shù)據(jù),同時(shí)將數(shù)據(jù)轉(zhuǎn)發(fā)到管道中的下一個(gè)。因此,數(shù)據(jù)以pipelilne的形式從一個(gè)DataNode傳輸?shù)较乱粋€(gè)DataNode。

Accessibility

可以通過(guò)許多不同的方式從應(yīng)用程序訪問(wèn)HDFS。從本質(zhì)上講,HDFS為應(yīng)用程序提供了一個(gè)文件系統(tǒng)Java API。還提供了用于此Java API和REST API的C語(yǔ)言包裝器。此外,HTTP瀏覽器還可以用來(lái)瀏覽HDFS實(shí)例的文件。通過(guò)使用NFS網(wǎng)關(guān),HDFS可以作為客戶(hù)機(jī)本地文件系統(tǒng)的一部分掛載。

Space Reclamation

File Deletes and Undeletes

,由FS Shell刪除的文件不會(huì)立即從HDFS中刪除。相反,HDFS將其移動(dòng)到一個(gè)垃圾目錄(每個(gè)用戶(hù)在/user/<username>/. trash下都有自己的垃圾目錄)。只要文件保存在垃圾中,就可以快速恢復(fù)。最近刪除的文件被移動(dòng)到當(dāng)前垃圾目錄(/user/<username>/. trash / current),在一個(gè)可配置的間隔內(nèi),HDFS為當(dāng)前垃圾目錄中的文件創(chuàng)建檢查點(diǎn)(在/user/<username>/. trash /<date>下),并在舊檢查點(diǎn)過(guò)期時(shí)刪除它們。有關(guān)垃圾的檢查點(diǎn),請(qǐng)參閱FS shell的expunge命令。在垃圾中的生命周期結(jié)束后,NameNode將從HDFS名稱(chēng)空間中刪除該文件。刪除文件會(huì)釋放與文件關(guān)聯(lián)的塊。注意,從用戶(hù)刪除文件的時(shí)間到HDFS中相應(yīng)的空閑空間增加的時(shí)間之間可能存在明顯的時(shí)間延遲。

如果開(kāi)啟回收站特性的話,可以通過(guò)如下參數(shù)強(qiáng)制刪除

hadoop fs -rm -r -skipTrash delete/test2
Decrease Replication Factor

當(dāng)文件的復(fù)制因子降低時(shí),NameNode選擇可以刪除的多余副本。下一個(gè)心跳將此信息傳輸?shù)紻ataNode。然后,DataNode刪除相應(yīng)的塊,集群中出現(xiàn)相應(yīng)的空閑空間。同樣,在完成setReplication API調(diào)用和集群中出現(xiàn)空閑空間之間可能存在時(shí)間延遲。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI