聊聊批计算、流计算、Hadoop、Spark、Storm、Flink等等

批处理计算和流处理计算

批:处理离线数据,冷数据。单个处理数据量大,处理速度比流慢。

流:处理在线,实时产生的数据。单次处理的数据量小,但处理速度更快。

Spark和Hadoop MapReduce 比较

Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用并行框架。

Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说, Spark 启用了RDD(弹性分布式数据集),除了能够提供交互式查询外,它还可以优化迭代工作负载。RDD可以常驻内存的属性,大大简化了迭代计算所需的开销,Spark任务可以立马利用上一次计算出来的RDD来进行下次迭代。

Spark和Hadoop Reduce属于哪种计算计算模型?

Apache Hadoop中的MapReduce是属于离线计算技术;

Spark中Spark Core属于离线计算技术,只不过它基于内存存储中间结果,速度上比MapReduce 快很多倍,又离实时计算技术很近;

Spark中Spark Streaming 子项目属于实时计算技术,类似于Storm;

Spark中SparkSQL属于离线计算技术,只不过它基于内存存储中间结果,速度上比Hive快很多倍。

Spark和Hadoop大数据生态

Spark并不是要成为一个大数据领域的“独裁者”,一个人霸占大数据领域所有的“地盘”,而是与Hadoop进行了高度的集成,两者可以完美的配合使用。Hadoop的HDFS、Hive、HBase负责存储,YARN负责资源调度;Spark负责大数据计算。实际上,Hadoop+Spark的组合,可以解决绝大部分大数据的场景。

Spark的设计遵循:一个软件栈满足不同应用场景的理念。

Spark逐渐形成了一套完整的生态系统,既能够提供内存计算框架,也可以支持SQL 即席查询、实时流计算、机器学习和图计算等。

Spark所提供的生态,可以支持如下3中场景:

  • 支持批处理(Batch Processing);
  • 交互式查询(Ad-hoc Queries);
  • 流数据处理(Stream Processing);

一栈式解决方案(one stack to rule them all)

聊聊批计算、流计算、Hadoop、Spark、Storm、Flink等等

Spark包含了大数据领域常见的各种计算框架:

  • Spark Core,Spark的核心,用于离线计算;
  • Spark SQL,用于交互式查询;
  • Spark Streaming,用于实时流式计算;
  • Spark MLlib,用于机器学习;
  • Spark GraphX,用于图计算;

聊聊批计算、流计算、Hadoop、Spark、Storm、Flink等等

Spark Streaming、Storm、Flink比较

Spark streaming批量读取数据源中的数据,然后把每个batch转化成内部的RDD。Spark streaming以batch为单位进行计算(默认1s产生一个batch),而不是以Tuple为单位,大大减少了ack所需的开销,显著提高了吞吐。

但也因为处理数据的粒度变大,导致Spark streaming的数据延时不如Storm,Spark streaming是秒级返回结果(与设置的batch间隔有关),Storm则是毫秒级。

Storm提供了低延迟的计算,但是吞吐较低,并且无法保证exactly once(Storm trident采用batch的方式改善了这两点),Spark streaming通过小批量的方式保证了吞吐的情况下,同时提供了exactly once语义,但是实时性不如Storm,而且由于采用micro-batch的方式,对window和event time的支持比较有限(Spark streaming 2.0中引入了window和event time,还在起步阶段)。

Flink采用分布式快照的方式实现了一个高吞吐、低延迟、支持exactly once的流式系统,流式处理的方式也能更优雅的支持window和event time。

当然也不是说Flink一定就比Storm、Spark streaming好,没有最好的框架,只有最合适的框架。根据自身的业务、公司的技术储备选择最合适的框架才是正确的选择。

聊聊批计算、流计算、Hadoop、Spark、Storm、Flink等等

相关推荐