hadoop-0.20.2 測試修改hdfs-site.xml:添加
<property>
<name>dfs.datanode.du.reserved</name>
<value>53687091200</value>
<description>Reserved space in bytes per volume. Always leave this much space free for non dfs use.
</description>
</property>
以下轉自網友:
最開始安裝hadoop集羣的時候每臺機器的磁盤只有260+G大小,使用了一段時間之後發現磁盤空間佔滿了,於是每個datanode又添加了兩塊2T的磁盤,通過hdfs-site.xml中的dfs.datanode.data.dir配置項通過逗號分隔將新添加的磁盤添加到datanode磁盤中。
添加之後問題有出現了,hadoop並不會自動將數據寫到有更大空閒空間的磁盤中,還是會將之前的小磁盤寫滿,小磁盤寫滿會使mapreduce產生的臨時文件沒有空間寫,而導致mapreduce執行失敗。所以需要小磁盤留有一定的空閒空間,查看hadoop資料,設置 dfs.datanode.du.reserved配置項可以使每個磁盤保留相應的磁盤空間,單位使用bytes,但是我設置之後發現其沒有起作用,我使用的hadoop版本是cloudera的cdh3u3。
沒有辦法,只能繼續查看資料,hadoop faq中寫道:
3.12. On an individual data node, how do you balance the blocks on the disk?
Hadoop currently does not have a method by which to do this automatically. To do this manually:
-
Take down the HDFS
-
Use the UNIX mv command to move the individual blocks and meta pairs from one directory to another on each host
-
Restart the HDFS
對於1)停止hdfs,只需要停止datanode,使用命令$HADOOP_HOME/bin/hadoop-daemon.sh stop datanode
對於2)必須是dfs.data.dir目錄下current目錄的子目錄 mv /mnt/exdata/dev1/cloudera/dfs/dn/current/subdir11/* /mnt/exdata/dev2/cloudera/dfs/dn/current/subdir11
對於3)$HADOOP_HOME/bin/hadoop-daemon.sh start datanode
文章來自:http://www.cnblogs.com/tangtianfly/archive/2012/09/11/2680064.html