添加之后问题有出现了,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