1.背景
通过ds的调度中的datax节点将mysql的数据导入到hdfs形成ods层数据,每次导入的是当天新增与变化的数据,然后dwd层是以数据的创建时间划分的日期分区(当然这些不是重点)。
2.问题复现
集群是通过cdh进行部署的,然后在周六的时候因为zookeeper的某些延迟原因导致挂掉了,集群重启也没能很好的解决这个问题,但是呢好歹运行起来了,接着尝试重跑失败的工作流,虽然跑的速度比平时慢了点但是好歹也跑完了。
周一来上班之后,业务人员反馈数据不准确的问题,然后开始排查问题所在。
3.分析问题
然后发现dwd层的数据会有重复的情况,查看ods层表的数据发现也没有重复(这里实际是重复了,只是每小时覆盖一次将重复情况覆盖了),仔细排查ods到dwd的sql也不可能存在数据重复的情况 ,思来想去想去只有可能是datax导数的节点重复运行了,之后去ds任务实例查找发现某个重跑的任务在同一时刻被调度了两次,导致datax导入了两次。
3.解决问题
知道问题之后开始查找出现这个问题的原因,然后在github下的issue 发现有人也遇到了节点多次运行的情况是由于zookeeper不稳定的原因造成的。回想我周六集群挂的时候的确是由于zookeeper的原因挂掉的,所以这个问题终于是明白了,ds在1.3.3以下版本都会遇到这个问题,说是在新版本已经解决了,最后将ds升级到1.3.9解决了这个的问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)