公司近几个月业务增长很快,数据量也大幅增长,但是存储数据的磁盘眼看就要满载,因此主管让我迁移数据,并且给我提了一下几个需求:
- 由于用的云服务器,磁盘是要收钱的,所以原来的盘腾出来不再续费,只用替换的是10p的云存储。
- 线上数据是不断流动的,不能停服务,不能影响线上数据的正常查询,动态替换。
- 数据一致性必须保证。
参考了(百度了)很多资料后的解决思路:
利用Hadoop副本的机制,集群的副本数是3,先停一个节点的datanode,因为其他两个副本都在其他节点上,不影响hadoop的正常运行,然后修改datanode的磁盘存储目录重启,最后进行副本补全,等副本100%补全后进行下一台节点的磁盘替换。
- 首先准备一块磁盘格式化后挂载到需要替换磁盘的机器上。
- 强制停止该节点datanode。kill -9 PID(datanode)
- 修改该节点Hadoop中的hdfs-site.xml配置文件,更换成新磁盘数据存储路径
dfs.datanode.data.dir file:///xdata/hadoop/hdfs/data
- 启动datanode hadoop-daemon.sh start datanode
- 检验磁盘是否成功替换:http://ip:50070
- 运行hadoop fs -setrep -w 3 -R /, 重新生成副本,执行完后不断刷新上面的页面就会发现新磁盘的占用量不断上升。
- 通过观察http://ip:50070/fsck这个网页来确保副本是否同步完成。如果遇到访问某个目录被拒绝,就执行hdfs dfs -chmod -R 755 目录给文件授权并重新执行第6步的命令,直到网页的所有副本同步完成,即下图的平均副本数达到3。
- 等上面数据恢复完后替换下一个节点的磁盘,重复上面的步骤。
从Hadoop集群中移除一块磁盘的 *** 作
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)