前段時間,一個客戶現場的Hadoop看起來很不正常,有的機器的存儲佔用達到95%,有的機器只有40%左右,恰好前任的負責人走了,這邊尚未明確接班人的時候。node
我負責的大數據計算部分,又要依賴Hadoop的基礎平臺,要是Hadoop死了,個人報表也跑不出來(專業背鍋)。服務器
作下balance,讓各個節點的存儲均衡一下。網絡
一、首先須要配上這個參數: 併發
<property> <name>dfs.datanode.balance.bandwidthPerSec</name> <value>62914560</value> <description>hdfs作balance的佔用的網絡帶寬,建議配置網卡帶寬的一半(62914560/1024/1024*8=480MBps)</description> </property>
二、重啓datanode oop
# 中止datanode [hadoop@venn06 sbin]$ ./hadoop-daemon.sh stop datanode stopping datanode # 啓動datanode [hadoop@venn06 sbin]$ ./hadoop-daemon.sh start datanode starting datanode, logging to /opt/hadoop/hadoop3/logs/hadoop-hadoop-datanode-venn06.out
服務器網卡的帶寬有限,不設置這個參數,作balance的時候,會把網卡的帶寬跑滿。須要移動的block不少,執行時間就會很長,會致使集羣網絡資源不足,任務跑得很慢。大數據
三、執行balance spa
[hadoop@venn05 bin]$ pwd
/opt/hadoop/hadoop3/bin
[hadoop@venn05 bin]$ nohup ./hdfs balancer -threshold 1 &code
因爲執行時間會很長,因此把命令放到後臺執行。blog
HDFS作balance的方式大概以下:ip
一、計算集羣中須要移動的block數量,計算須要移動的文件大小。
二、併發的從資源佔用高的機器,往資源佔用低的機器移數據。一批一批的移,一批的大小,會根據須要移動的文件大小計算。
三、重複第1步,直到資源均衡(1%左右的差距)
HDFS作balance的時候,會先移動block,成功後纔會刪除數據,只要集羣網絡資源充足,能夠不警慎的執行balance操做,隨時停也不影響,不會丟數據。
因爲datanode 空間大小不一樣,因此有的機器磁盤佔用會高一點。