我在Apache Spark上实现了我的一个机器学习/图形分析算法:
该算法非常迭代(与所有其他ML算法一样),但它有一个相当奇怪的工作流程:首先是所有训练数据的子集(称为种子RDD:{S_1}是随机选择的)并在每次迭代中加载,种子{S_n}将自我更新{S_n + 1}并产生模型RDD:{M_n}。种子达到一个条件后,迭代将停止,所有模型RDD将被聚合以产生最终结果。
与MLLib中的所有迭代实现一样,{S_ }和{M _ }都必须定期检查点(这似乎比将{M}提交到不断增长的RDD和缓存/检查点更有效它:已经在HDFS上的旧数据不必再次写入磁盘或占用内存空间直到最后阶段。
但是,在最后一步之前聚合所有{M_ *}。火花似乎被冻结了:所有阶段/作业都已完成,没有新的阶段/作业待定,所有驱动程序和集群都在运行但什么也没做(算法还远未完成)。
我必须等待10个多小时才能开始行动。因此,UI之间的阶段之间的延迟看起来非常奇怪(请参阅15s任务运行时间与10h +阶段间延迟之间的鲜明对比?):
我想知道我的算法实现是不是针对Spark进行了优化?或者我只是遇到一个隐藏的问题?非常感谢您的意见