使用MapReduce模型实现迭代式算法,最straightforward也是最general的方法就是,将多个map/reduce任务链接起来,构成一个chain。这种manual的方法需要user driver做两件事情:
(1)termination终止条件判断:或者设定一个最大迭代次数,或者给定一个终止阈值,或者需要比较相邻两次迭代的结果的差异性(这种比较可能需要额外的map/reduce任务来完成);
(2)整个任务链map/reduce之间的input/output问题,即上一次迭代的reducer输出作为下一步迭代的mapper输入,考虑是否需要缓存中间结果集以实现数据重用等。
HaLoop是一种MapReduce的改进实现,支持迭代式数据分析,主要有以下改进:
(1)Loop-invariant cache:即将那些在循环迭代过程中不变的mapper输入和reducer输入缓存在本地节点上,以供后续迭代重用;
(2)Caching for fixpoint verification:即缓存reducer输出结果,便于比较两次迭代的结果,以判断是否达到终止条件,而不需要一个专门的MapReduce任务做检查;
(3)Loop-aware scheduling:即将处理相同数据分区的两次任务分配到一个物理节点,减少数据的重新加载和mapper/reducer之间的通信。
参考:
https://blog.sciencenet.cn/blog-425672-522934.html
上一篇:
弹性分布式数据集:基于内存的集群计算的容错性抽象(3)下一篇:
Big Data: Principles and best practices of scalable realtime