在CDH集群中,添加新的CDH节点导致数据丢失问题解决记录

前言

CDH节点操作,按理是可以动态添加,或减少的,但是在实际操作过程中,却不是这样,因为不管添加或减少数据节点,都会涉及到配置文件的变化,因此在添加或减少过后都需要做服务重启,才能使操作生效,而且没有操作快照,使问题操作或者误操作不能返回,这或许是开源产品的一个不足之处。

问题

在添加节点时,原数据节点(例:hadoopOld)的数据存储目录(/home/data/hadoop),和新数据节点(hadoopNew)的数据存储目录(/home/data/0)不同。
在添加节点过程中,在原数据节点的数据存储目录之上,添加新数据节点的数据存储目录,导致新添加的数据节点目录映射到所有节点(hadoopOld和hadoopNew),因此集群在做磁盘检查的时候,认为/home/data/new磁盘目录是坏的,而且datanode服务设置接受的 DataNode失败的卷为new,导致hadoopOld所有目录都无法加载。而恰恰hadoopOld上/home/data/hadoop目录下存储了之前所有的数据,从而导致了数据丢失。
CM显示datanode运行状况:

在CDH集群中,添加新的CDH节点导致数据丢失问题解决记录_第1张图片

问题的解决

从服务器日志中查找到了错误日志:
java.io.IOException: BlockPoolSliceStorage.recoverTransitionRead: attempt to load an used block storage: /home/data/0/dfs/dn/current/BP-1099028246-192.168.6.116-1466650426421
登上hadoopOld节点,更改dfs.data.dir配置

  • 更改前如下图:

在CDH集群中,添加新的CDH节点导致数据丢失问题解决记录_第2张图片

  • 更改后如下图:

在CDH集群中,添加新的CDH节点导致数据丢失问题解决记录_第3张图片

然后在重启datanode的服务,就可以加载到hadoopOld节点上的/home/data/hadoop,从而把丢失的数据找回。
数据找回后,CM显示datanode运行状况:

在CDH集群中,添加新的CDH节点导致数据丢失问题解决记录_第4张图片

总结

  • 虽然在做操作之前已经有咨询过,相关有经验的同事,但是由于公司资源有限,总归没有做相关测试,导致在生产环境操作时发生事故。以后在操作涉及到与客户数据有关的操作时,需要在本地测试好,再去生产环境上操作。
  • 涉及到hadoop生产环境配置更改操作时,需要异常小心,发现告警配置时,先咨询有经验的同事或者同事讨论决定,列出正确操作步骤。

 

 

你可能感兴趣的:(解决方案,大数据,#,hadoop)