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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊聊批计算、流计算、Hadoop、Spark、Storm、Flink等等相关的知识,希望对你有一定的参考价值。

参考技术A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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等等的主要内容,如果未能解决你的问题,请参考以下文章

基于Flink建设流批一体实时数仓

Spark On Zeppelin

Flink 流批一体太强了!Spark Streaming 根本不是对手?

Spark速度比MapReduce快,不仅是内存计算

spark

大数据处理为何选择Spark,而不是Hadoop