Algorithm ApacheSpark中检查点RDD的联合在两个阶段之间有很长的延迟(>10小时)

Algorithm ApacheSpark中检查点RDD的联合在两个阶段之间有很长的延迟(>10小时),algorithm,machine-learning,apache-spark,rdd,Algorithm,Machine Learning,Apache Spark,Rdd,我正在Apache Spark上实现一种机器学习/图形分析算法: 该算法与所有其他ML算法一样是非常迭代的,但它有一个相当奇怪的工作流程:首先随机选择并加载所有训练数据的子集,称为seeds RDD:{S_1},在每次迭代中,seeds{S_n}将更新自身{S_n+1},并生成一个模型RDD:{M_n}。种子达到某个条件后,迭代将停止,所有模型RDD将聚合以产生最终结果 像MLLib中的所有迭代实现一样,{S}和{M}都必须定期检查,这似乎比将{M}提交到一个不断增长的RDD和缓存/检查点更有效

我正在Apache Spark上实现一种机器学习/图形分析算法:

该算法与所有其他ML算法一样是非常迭代的,但它有一个相当奇怪的工作流程:首先随机选择并加载所有训练数据的子集,称为seeds RDD:{S_1},在每次迭代中,seeds{S_n}将更新自身{S_n+1},并生成一个模型RDD:{M_n}。种子达到某个条件后,迭代将停止,所有模型RDD将聚合以产生最终结果

像MLLib中的所有迭代实现一样,{S}和{M}都必须定期检查,这似乎比将{M}提交到一个不断增长的RDD和缓存/检查点更有效:HDF上已经存在的旧数据不必再次写入磁盘或占用内存空间,直到最后阶段

但是,在最后一步之前,当所有{M_*}被聚合时。火花似乎被冻结了:所有的阶段/作业都完成了,没有新的阶段/作业挂起,所有的驱动程序和集群都在运行,但什么也不做算法还远远没有完成

我要等10多个小时才能开始。因此,UI上各阶段之间的延迟看起来非常奇怪。看到15秒的任务运行时间和10小时以上的阶段间延迟之间的鲜明对比了吗

我想知道我的算法实现是否没有针对Spark进行优化?或者我只是遇到了一个隐藏的问题?非常感谢你的意见