天天看點

HDFS- 資料複制資料複制(Data Replication)資料複制流水線參考文獻

資料複制(Data Replication)

HDFS

旨在跨大型叢集中的計算機可靠地存儲非常大的檔案。它将每個檔案存儲為一系列塊,除最後一個塊之外的檔案中的所有塊都具有相同的大小,

HDFS

使用的預設塊大小為

128MB

。複制檔案的塊以實作容錯,且一般複制出的檔案塊會存儲到不同的

DataNode

中。每個檔案的

Block

大小和

Replication

因子都是可配置的。。

Replication

因子在檔案建立的時候會預設讀取用戶端的

HDFS

配置,然後建立(可改變)

HDFS

中的檔案是

write-one

,并且嚴格要求在任何時候隻有一個

writer

HDFS

資料備援複制如圖所示。

HDFS- 資料複制資料複制(Data Replication)資料複制流水線參考文獻

從圖可以看到,檔案

/user/nuoline/data/part-1

的複制因子

Replication

值是

2

,塊的

ID

清單包括

{1,3}

,可以看到塊1和塊3分别被備援備份了兩份資料塊;

檔案

/user/nuoline/data/part-2

的複制因子

Replication

值是

3

,塊的ID清單包括2、4、5,可以看到塊

{2,4,5}

分别被備援複制了三份。

HDFS

中,

NameNode

做着有關塊複制的所有決定,它定期從群集中的每個

DataNode

接收

Heartbeat

Blockreport

。心跳包(

Heartbeat

)的接收表示該

DataNode

節點正常工作,而

Blockreport

包括了該

DataNode

上所有的

Block

組成的清單

資料複制流水線

當用戶端将資料寫入複制因子為

r = 3

HDFS

檔案時,

NameNode

使用

replication target choosing algorithm

檢索

DataNode

清單。此清單包含将承載該塊副本的

DataNode

然後用戶端向第一個

DataNode

寫入,第一個

DataNode

開始分批接收資料,将每個部分寫入其本地存儲,并将該部分傳輸到清單中的第二個

DataNode

。第二個

DataNode

又開始接收資料塊的每個部分,将該部分寫入其存儲,然後将該部分重新整理到第三個

DataNode

。最後,第三個

DataNode

将資料寫入其本地存儲。

可見,

DataNode

是從流水線中的前一個接收資料,同時将資料轉發到流水線中的下一個,資料是從一個

DataNode

流水線到下一個

DataNode

操作命名

應用可以以多種方式操控 HDFS 上的檔案,其中通過 FS Shell 可以像操控 Linux 檔案系統一般,常用指令有:

hdfs dfs -cp /user/merge /user/search
           

上面的指令将merge檔案下面的所有檔案(包括merge檔案夾)複制到search目錄下。

Action Command
建立 foodir 檔案夾 bin/hadoop fs -mkdir /foodir
删除檔案夾 bin/hadoop fs -rm -R /foodir
檢視檔案内容 bin/hdfs dfs -cat /foodir/myfile.txt
上傳檔案 bin/hdfs dfs -copyFromLocal ~/a.txt /foodir/
…… ……

會發現這裡有兩種指令字首,一個是 hadoop fs,一個是 hdfs dfs

差別是:hadoop fs 可以用于其他檔案系統,不止是hdfs檔案系統内,也就是說該指令的使用範圍更廣;而 hdfs dfs 專門針對hdfs分布式檔案系統。

還有一個字首為 hadoop dfs,這個已經過時,建議不要使用。

參考文獻

Hadoop:HDFS的資料複制

繼續閱讀