迭代计算的一些开源框架

  迭代计算是一种通过多次循环得出结果的计算方式,一般需要将上一次计算的结果代入到下一步的计算中去。当计算数据和计算规模都比较小时,可以在单机上实现计算过程;但是当数据集变大或者计算复杂度上升时,在单机上就可能无法完成计算了。在互联网企业中,各种数据挖掘,信息检索等计算用例,由于抽取的数据集较大,往往都是进行分布式的迭代计算。
   MapReduce框架能够很好的处理大规模的数据计算,但是在实现需要迭代类算法时的效率比较低。一是由于为了提高可靠性,在Map和Reduce过程中都有写磁盘的过程,计算结果并不是直接在计算子过程之间传递;对于迭代类的计算,这种模式会导致在循环计算中反复I/O;二是Map和Reduce的串行结构还不能直接适用于循环或者链式的计算。尽管如此,Map-Reduce的计算思想对当前迭代计算框架的发展有很大的影响,许多框架或者基于MapReduce进行修改,或者借鉴了其计算思想进行设计。
   下面是一些已有的迭代计算框架:
  • twister (http://www.iterativemapreduce.org):这是一个java写的开源框架,使用Map-Reduce这种模式,上一轮reduce的结果会直接传送到下一轮的map,用户可自定义迭代结束的条件。但是它不能对大数据集进行自动切分,不支持HDFS,而且把所有数据都扔到内存里。在2011年3月发布完0.90后就没下文了,作者Jaliya Ekanayake等也离开实验室,不知所踪......
  • haloop (https://code.google.com/p/haloop/):这是基于Hadoop进行扩展的迭代式计算框架,它提供了一套新的API用于程序开发,使用的编程语言是Java。但是相关社区极不活跃,也不知道下一步的计划.....
  • Spark(http://www.spark-project.org):这是当前较为活跃的一个开源框架,主要目的是用于处理大数据集上的迭代式算法(机器学习)和交互式查询(数据挖掘的一些工具)。它使用scala开发,使得编程代码异常简洁,但最近也发布是了Java API接口;它使用Mesos/YARN作为底层的调度框架,并且和hadoop和Ec2紧密集成,可以直接读写hdfs或S3的文件进行计算。最近发布了0.6.0版本,是一个值得关注的项目。
  • DPark(https://github.com/douban/dpark):这是Spark的Python克隆,由豆瓣的牛人开发,在豆瓣内部有使用。
  • 此外还有一些图计算框架,如Apache Hama(http://hama.apache.org/)和Giraph( http://incubator.apache.org/giraph/):基本上是参考google pregel的开源实现。

  总的来说,当前这些迭代计算的框架还是处于发展阶段,远不如MapReduce和Hadoop生态区成熟。

猜你喜欢

转载自xuwenq.iteye.com/blog/1703723