经过个把月的摸爬滚打,项目终于在磕磕绊绊中成型了。先来个简介:用python 写了一堆的聚类算法,将线上数据进行聚类分析,找出离群点,建立模型。用这些模型用来检测用户的行为。
bug产生的过程
实时检测部分采用SparkStreaming实现,在使用过程中发现代码启动后一直会包序列化问题,
瞻仰下咱们这个bug,测试美眉将bug级别从normal改到high,又从high改到了cri,那个扎心啊。。。关键一直没有很好的修复。。
看看我的处理过程:
首先怀疑是序列化的问题,将所有bean都添加序列化接口了,试试?
不行!
问了一下我师傅,可能是由于类传输的时候非静态的类需要序列化,静态类不需要序列化,是不是可以躲过这样的bug,将所有方法都改成static ,试试?
还是不行!!
中间还试了n中方法。。。。
疯了!怎么办??看了一下jar包貌似有冲突的,去掉试试?
还是不行!!!
我去,难道真解不了了。。
万般无奈下瞅了一眼打包文件的xml(assembly.xml)
我去!!!没有将无用的jar在打包过程中踢掉,导致程序在提交spark的时候会将多余的jar提交,kafka的jar会造成序列化冲突!
将这个配置加上重新打包,问题解决!!
困扰了一个礼拜的bug终于解决了。
教训:
项目配置一定要仔细审核每一个节点,理解其中的原理,不能只是copy改,这样出了问题自己都摸不着头脑。
在排查时要有步骤,就像打拳一样,有板有眼,不能饥不择食,乱整(将所有类改为静态导致数据库入库产生垃圾数据),产生新的bug。