标签:
关于这个问题,Hadoop暂时未提供自动解决的方案,已经提上日程,jira上有记录。
hadoop wiki上提到了手动处理的解决方案。如上链接如示。
问题描述,一个datanode节点的datanode.dir会配置多个磁盘或目录,而如果因某些原因,如坏盘更换或磁盘选择策略的问题,
造成某一些磁盘目录使用很多,而某些或某个盘的使用率很低,这个时候可以手动进行处理。
1。先把这个datanode节点的datanode进程停掉,这样就不写入数据,才可以进行下一步操作。
2。例如从/data1/ 把block move到/data2/ 则尽可能保证目录结构一致,wiki中提到新版本中子目录不一致也不行。
mv的时候,要注意权限,不要使用root用户mv完之后,不改权限,这也会造成无法读取的问题。
我自己测试的环境cdh5.0.2 hadoop2.3
data.dir /hdp2/dfs/data ,新添加一个路径,/hdp2/dfs/data2
因为data2目录是空的,如果启动datanode 会对该目录进行初始化,如创建 version文件等。
我直接在data2中创建了数据池等目录到finalized ,然后把data下面第一层的block和meta挪了过来,没有把subdir目录挪过来。
我直接启动了datanode进程后,发现我挪过来的数据被删除了(为什么)
不过还好,副制因子是2,这些数据会同步过来。我停掉datanode进程,把subdir10(这里面有数据)直接mv到/data2相应的目录下,
再次启动datanode进程,webui上检查发现,block是被发现了。
为安全起见,在生产环境中操作,一定要对数据进行一下备份,或者是先上传一个大文件,然后针对这个文件的blocks进行测试后再大规模处理。
标签:
原文地址:http://www.cnblogs.com/huaxiaoyao/p/5271228.html