1. 概览

目前流行的分布式计算框架主要有 Hadoop MapReduce, Spark Streaming, Storm; 这三个框架各有优势,现在都属于 Apache 基金会下的顶级项目,下文将对三个框架的特点与适用场景进行分析,以便开发者能快速选择适合自己的框架进行开发。

  • Hadoop MapReduce 是三者中出现最早,知名度最大的分布式计算框架,最早由 Google Lab 开发,使用者遍布全球(Hadoop PoweredBy);主要适用于大批量的集群任务,由于是批量执行,故时效性偏低,原生支持 Java 语言开发 MapReduce ,其它语言需要使用到 Hadoop Streaming 来开发。
  • Spark Streaming 保留了 Hadoop MapReduce 的优点,而且在时效性上有了很大提高,中间结果可以保存在内存中,从而对需要迭代计算和有较高时效性要求的系统提供了很好的支持,多用于能容忍小延时的推荐与计算系统。
  • Storm 一开始就是为实时处理设计,因此在实时分析/性能监测等需要高时效性的领域广泛采用,而且它理论上支持所有语言,只需要少量代码即可完成适配器

2015年5月总结的区别图:

2. hadoop

  • 由于 Hadoop 的中间结果需要依托于 hdfs ,从而需要经历硬盘及网络 io 的过程所以在实时性方面表现稍差

3. spark

  • Spark 的原理是将任务进行分解,并且在每一步任务上进行相应的操作处理,同时根据操作处理顺序构建 DAG 图,从而应用 DAG 引擎进行相关操作。
  • 由于 Spark 在进行处理时主要使用内存所以基本可以做到实时性,同时,在进行 DAG 引擎优化方面对速度也有一定程度提升;
  • Spark 本身是通过 DAGScheduler 与 TaskScheduler 实现任务调度以及计算节点切换,现在 mesos 及 yarn 都对 spark 进行了一定程度的支持;
  • Spark 的数据模型使用 RDD 这种弹性的存储,并且基于该数据模型构建了相应的数据依赖,从而实现一定的容错机制;
  • Spark 基本上都运行在内存中,可以使用 yarn 或者 mesos 进行资源的统一管理,然后在上面进行 spark 的相关任务调度;

4. storm

Storm 是基于消息源( spout )获取数据发送信息,并且将信息发送到 bolt 形成相应的 tuple ,之后在此基础上继续构建数据的处理规则,处理规则需要认为变成实现

参考资料:http://www.36dsj.com/archives/34666?utm_source=tuicool&utm_medium=referral