一、HDFS中block備份的概念和作用
副本(Replication)是Hadoop HDFS中的一個非常重要的特性,作為分散式文件系統的一種實現方式,
HDFS的數據是被切分成一個個固定大小的block,而這些block默認情況下會被分別保存在不同的DataNode上,
並且會有若干備份數來保證數據的安全性,防止因為Node失效而引發的數據丟失。
一般而言,HDFS為每個block副本數建議設為3個,即默認情況下,每個block會被保存三個副本。
為了更好的理解副本的作用,在HDFS架構中可以分為三種角色:Client、NameNode和DataNode,
可以通過下面偽代碼中的示例了解副本的實現方式。
Client ----> NameNode ----> DataNode write 10 blocks ------> choose 3 DN for each block ------> receive block written ok Client ----> NameNode ------> choose 3 DN for each block ------> read 10 blocks ------> return block data to client
當客戶端向HDFS寫入數據時,數據會被分割成若干個block,然後分別將每個block的副本寫入不同的DataNode中。
當客戶端讀取數據時,NameNode會查詢HDFS元數據信息,然後返回包含block副本位置信息的響應,
然後客戶端可以通過與DataNode交互,獲取數據塊的副本,以此實現數據讀取的目的。
二、3個備份數的優劣分析
那麼,為什麼在HDFS中,block默認保存三個備份呢?其實,這是一個數字的折中考慮。
當副本數過多時,HDFS存儲的空間和網路帶寬的消耗就會劇增,而副本數過少可能會面臨DataNode失效導致數據丟失的風險,
所以副本數為3是為了在數據可靠性和性能資源方面做一個平衡,也是經過很多實踐總結出來的一個較為理想的取值。
具體來說,對於3個備份的優劣分析可以從以下角度入手:
1. 數據可靠性
當HDFS中的某一台機器失效時,NameNode會查詢block副本信息並將該副本從DataNode上刪除,然後將它從其他的副本恢復過來,
以此保持數據的可靠性。如果HDFS中只有一個副本的話,那麼如果該副本所在的機器掛掉,數據就會丟失。
如果副本過多,數據的可靠性就會變得更高,但是這樣會犧牲存儲空間和網路帶寬,而3個副本的情況能夠在存儲空間和帶寬消耗上做到一定的平衡。
2. 數據可用性
當HDFS中的某一台機器失效時,它所存儲的數據塊會由其他機器提供服務以保證數據可用性。由於副本數比較少,這個過程可能會比較耗費時間,
這樣就會導致一定程度上的停滯。當副本數目增加到比較多時,如果一台機器掛掉,剩餘機器將被迅速調度以繼續服務,
當副本數目過多時,即使幾個機器同時掛掉,整個集群依然有足夠的數據副本來提供服務,這樣可以防止停滯。
而3個副本的情況再次在可用性和可靠性之間做到了平衡。
3. 數據存儲容量
隨著副本數目的增加,佔用的磁碟和存儲空間也會隨之增加,所以副本數目不能太多,否則就會消耗太多的資源。
當然,若副本數目過低,數據即不能保證可靠性。三個副本的情況比較適宜。
三、更改HDFS中block備份數的方法
如果默認的3個備份數滿足不了業務需求,用戶也可以自行更改HDFS中block的備份數目,這裡提供兩種方法:
1. 通過配置文件更改備份數目
Hadoop將配置文件分為 core-site.xml 和 hdfs-site.xml 配置文件,其中 hdfs-site.xml 文件用於配置 HDFS 相關參數。
在這個文件中,有一個參數 dfs.replication 確定了 block 的副本數。可以通過修改這個參數重新設置HDFS中block的備份數目。
其配置信息如下所示:
<property> <name>dfs.replication</name> <value>3</value> </property>
2. 通過命令更改備份數目
另外一種方法是通過hadoop fs命令修改備份數目。下面的命令將會修改目錄 /path/to/file 的文件副本數為5:
hadoop fs -setrep -w 5 /path/to/file
結論
在HDFS中,block默認的備份數目為3。這個數目的取值是經過很多實踐總結出來的一個較為理想的取值,可以在數據可靠性和性能資源方面做到一定的平衡。
同時,如果需要修改備份數目,用戶可以通過配置文件或者命令行等多種方式來更改,以滿足不同業務需求。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/160939.html