记一次算法迭代无法结束bug

用自己写的pregel算法框架实现了一个算法,在单机情况下正常执行,在分布式下计算结束需要的迭代次数大幅增加,甚至无法结束。

从逻辑上来讲,单机与分布式计算的迭代次数应该是一致的,不应该出现这种情况。

 

pregel算法框架封装了多线程以及分布式的细节,怀疑是框架本身的问题(自己写的框架不够自信了….),排查了一天多还是没找到问题,后来又发现了分布式计算的结果每次条数都不一样,倒推出了数据加载出了问题,最后发现是算法加载数据的时候一个方法传错了参数,导致了一个属性获取错误,这个方法的参数在单机时传错了也没有影响。。。

这次bug排查花了比较长时间,大概有两个原因。

  • 算法的逻辑是在动态加载的jar包里,目前还没找到打断点比较好的方法。只能靠打日志。
  • 违背了先从小地方找原因的原则。排查错了地方,一开始在排查框架侧。。。