溫馨提示×

溫馨提示×

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

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

Hadoop維護(hù)實(shí)戰(zhàn)-設(shè)置hdfs副本數(shù) dfs.replication

發(fā)布時(shí)間:2020-07-29 19:07:01 來源:網(wǎng)絡(luò) 閱讀:16978 作者:zlfwmm 欄目:大數(shù)據(jù)

Hadoop維護(hù)實(shí)戰(zhàn) 設(shè)置hdfs副本數(shù) dfs.replication

有個(gè)臨時(shí)應(yīng)用,使用臨時(shí)調(diào)配的機(jī)器,機(jī)器磁盤差別數(shù)十倍。

在使用hadoop存儲數(shù)據(jù)時(shí)導(dǎo)致小磁盤機(jī)器使用率達(dá)80%多,而大磁盤機(jī)器使用不過才10%多一點(diǎn)。


明顯的hadoop集群各datanode空間使用率很不均衡,需要重新balance。于是想到了hdfs的均衡器balancer。

sbin/start-balancer.sh -threshold 10

但是在執(zhí)行hdfs的balancer時(shí)會(huì)自動(dòng)退出,不執(zhí)行,也沒有發(fā)現(xiàn)Error或者Warning。

但在out文件中可以看到一些信息:

balancer已經(jīng)計(jì)算出要移動(dòng)的數(shù)據(jù)量,但是就是沒有移動(dòng),只是提示:

No block has been moved for 5 iterations. Exiting...


原來hadoop balancer在進(jìn)行轉(zhuǎn)移block的時(shí)候是會(huì)判斷的:

 * <p>The balancer automatically exits when any of the following five  

 * conditions is satisfied: 

 * <ol> 

 * <li>The cluster is balanced; 

 * <li>No block can be moved; 

 * <li>No block has been moved for five consecutive(連續(xù)) iterations; 

 * <li>An IOException occurs while communicating with the namenode; 

 * <li>Another balancer is running. 

 * </ol> 

 * 下面5種情況會(huì)導(dǎo)致Balance操作的失敗 

 * 1、整個(gè)集群已經(jīng)達(dá)到平衡狀態(tài) 

 * 2、經(jīng)過計(jì)算發(fā)現(xiàn)沒有可以被移動(dòng)的block塊 

 * 3、在連續(xù)5次的迭代中,沒有block塊被移動(dòng) 

 * 4、當(dāng)datanode節(jié)點(diǎn)與namenode節(jié)點(diǎn)通信的時(shí)候,發(fā)生IO異常 

 * 5、已經(jīng)存在一個(gè)Balance操作 

顯然是第三點(diǎn)問題了,log里顯示執(zhí)行了5次迭代但都每移動(dòng),應(yīng)該是多副本的原因,迭代的block在大磁盤機(jī)器上都已經(jīng)存在,那邊都已經(jīng)存在了,所以balancer移動(dòng)進(jìn)程就退出了。



不能執(zhí)行均衡器了,那只有減少副本數(shù)了。

修改hdfs的副本數(shù),首先想到的是修改hdfs-site.xml中的dfs.replication參數(shù),默認(rèn)為3,開始時(shí)設(shè)置成了2,現(xiàn)在索性修改為1,然后重啟datanode命令:sbin/hadoop-daemon.sh start datanode

但似乎沒有起作用,數(shù)據(jù)量沒有變化,按理說應(yīng)該大量數(shù)據(jù)減少才對啊。這又是為什么呢?

首先 dfs.replication這個(gè)參數(shù)是個(gè)client參數(shù),即node level參數(shù)。需要在每臺datanode上設(shè)置。

一個(gè)文件,上傳到hdfs上時(shí)指定的是幾個(gè)副本就是幾個(gè)。以后你修改了副本數(shù),對已經(jīng)上傳了的文件也不會(huì)起作用??梢栽谏蟼魑募耐瑫r(shí)指定創(chuàng)建的副本數(shù)。

如果你只有3個(gè)datanode,但是你卻指定副本數(shù)為4,是不會(huì)生效的,因?yàn)槊總€(gè)datanode上只能存放一個(gè)副本。


啊,原來是這樣,那就看下現(xiàn)在HDFS的副本數(shù),并把它們都修改執(zhí)行下,是不是有相應(yīng)的hadoop shell命令呢?


Hadoop Commands和FileSystem Shell

http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/CommandsManual.html

http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/FileSystemShell.html


執(zhí)行 hadoop fsck /  查看整個(gè)目錄的備份數(shù)分布,輸出結(jié)果如下:

        Default replication factor  2

        Average block replication 2.38


修改hdfs文件備份系數(shù):hadoop dfs -setrep [-R] <path> 如果有-R將修改子目錄文件的性質(zhì)。

hadoop dfs -setrep -w 1 -R /user/hadoop/dir1 就是把目錄下所有文件備份系數(shù)設(shè)置為1.

這個(gè)需要一些時(shí)間,感覺會(huì)掃描所有指定目錄下的文件。


修改完已經(jīng)存儲的文件后,記得要修改以后放入的數(shù)據(jù)副本數(shù),這個(gè)就要看client端了,如果client端有設(shè)置,一定要修改。


上面的都執(zhí)行后如果還是不均衡,此時(shí)可以再執(zhí)行hdfs的均衡器balancer。


個(gè)人感覺以上的只是出現(xiàn)問題時(shí)的一個(gè)解決方案,期望不要出現(xiàn)這樣的問題,畢竟數(shù)據(jù)量大了操作會(huì)有很大的影響的。

我們應(yīng)該對dfs.replication的數(shù)值做出很好的規(guī)劃,盡量避免需要降低該數(shù)值的情況出現(xiàn)。


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

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

AI