背景
最近在写一个KShell 算法,使用的是跟pagerank一样的数据集twitter,算法在小数据集上都没有问题,但是在集群上每次算法跑到90%的时候都出现stackoverflow,虽然之前写pagerank有经验,设置了checkpoint,但是跑了几次仍然是老毛病。
在侯哥的帮助下,我发现设置checkpoint也有没用的时候,RDD不仅有个checkpoint,可以将RDD的lineage 截断,也有个函数isCheckPointed()来检测该RDD是否checkpoint成功了么。现在记录下这个很容易出错的大坑,积点儿人品。
|
|
这样返回checkpoint没有成功,因为之前g已经被物化了。
|
|
这样返回checkpoint仍然没有成功,因为之前g只在checkpoint之后物化了vertices,edges没有物化,所以整个图仍然没有物化。
work的checkpoint是这样的:
|
|
只有在checkpoint之后,物化vertices以及edges,整个图的checkpoint才会成功。
总结
最后总结一下,对于普通RDD,要像成功checkpoint,需要之前没有物化,chekpoint后物化它,对于像grpahx 中grpah这样的数据,不仅仅要物化vertice,还要物化edges,物化triplets没用,至于为什么物化triplets不行,我也没找到合理的解释。