您好,登錄后才能下訂單哦!
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)。
免責(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)容。