您好,登錄后才能下訂單哦!
Hadoop維護實戰 設置hdfs副本數 dfs.replication
有個臨時應用,使用臨時調配的機器,機器磁盤差別數十倍。
在使用hadoop存儲數據時導致小磁盤機器使用率達80%多,而大磁盤機器使用不過才10%多一點。
明顯的hadoop集群各datanode空間使用率很不均衡,需要重新balance。于是想到了hdfs的均衡器balancer。
sbin/start-balancer.sh -threshold 10
但是在執行hdfs的balancer時會自動退出,不執行,也沒有發現Error或者Warning。
但在out文件中可以看到一些信息:
balancer已經計算出要移動的數據量,但是就是沒有移動,只是提示:
No block has been moved for 5 iterations. Exiting...
原來hadoop balancer在進行轉移block的時候是會判斷的:
* <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(連續) iterations;
* <li>An IOException occurs while communicating with the namenode;
* <li>Another balancer is running.
* </ol>
* 下面5種情況會導致Balance操作的失敗
* 1、整個集群已經達到平衡狀態
* 2、經過計算發現沒有可以被移動的block塊
* 3、在連續5次的迭代中,沒有block塊被移動
* 4、當datanode節點與namenode節點通信的時候,發生IO異常
* 5、已經存在一個Balance操作
顯然是第三點問題了,log里顯示執行了5次迭代但都每移動,應該是多副本的原因,迭代的block在大磁盤機器上都已經存在,那邊都已經存在了,所以balancer移動進程就退出了。
不能執行均衡器了,那只有減少副本數了。
修改hdfs的副本數,首先想到的是修改hdfs-site.xml中的dfs.replication參數,默認為3,開始時設置成了2,現在索性修改為1,然后重啟datanode命令:sbin/hadoop-daemon.sh start datanode
但似乎沒有起作用,數據量沒有變化,按理說應該大量數據減少才對啊。這又是為什么呢?
首先 dfs.replication這個參數是個client參數,即node level參數。需要在每臺datanode上設置。
一個文件,上傳到hdfs上時指定的是幾個副本就是幾個。以后你修改了副本數,對已經上傳了的文件也不會起作用。可以在上傳文件的同時指定創建的副本數。
如果你只有3個datanode,但是你卻指定副本數為4,是不會生效的,因為每個datanode上只能存放一個副本。
啊,原來是這樣,那就看下現在HDFS的副本數,并把它們都修改執行下,是不是有相應的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
執行 hadoop fsck / 查看整個目錄的備份數分布,輸出結果如下:
Default replication factor 2
Average block replication 2.38
修改hdfs文件備份系數:hadoop dfs -setrep [-R] <path> 如果有-R將修改子目錄文件的性質。
hadoop dfs -setrep -w 1 -R /user/hadoop/dir1 就是把目錄下所有文件備份系數設置為1.
這個需要一些時間,感覺會掃描所有指定目錄下的文件。
修改完已經存儲的文件后,記得要修改以后放入的數據副本數,這個就要看client端了,如果client端有設置,一定要修改。
上面的都執行后如果還是不均衡,此時可以再執行hdfs的均衡器balancer。
個人感覺以上的只是出現問題時的一個解決方案,期望不要出現這樣的問題,畢竟數據量大了操作會有很大的影響的。
我們應該對dfs.replication的數值做出很好的規劃,盡量避免需要降低該數值的情況出現。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。