05 Spark:为什么选择 Spark

这篇总结来自极客时间专栏《大规模数据处理实践》的 12 节。

Apache Spark 是 2009 年由加州大学伯克利 AMP 实验室开发的,2013 年 Spark 成为 Apache 的开源项目,可以说,Spark 从一诞生就受到很大关注, 现在它也是 Hadoop 生态中的重要一环,几乎所有有大数据平台的公司都在使用 Spark。

在看一项技术(或新技术)时,我们首先很有必要了解一下这项技术出现的意义,这样才能知道它能应用在什么产品中?它的优缺点是什么?什么场景更适合用它?否则我们对这项技术的了解就非常浅尝辄止了。

MapReduce 的缺陷

Spark 本省就是为了取代 MapReduce 而设计的,这里再来回顾下 MapReduce 的缺陷。

MapReduce 通过简单的 Map 和 Reduce 的抽象提供一个编程模型,可以在一个由上百台机器组成的集群上并发处理大量任务,它把各种各样的复杂处理抽象分解成 Map 和 Reduce 的基本元素。

但 MapReduce 缺陷有以下几点:

  1. 高昂的维护成本;
  2. 性能不满足条件;
  3. MR 抽象层次太低,开发者开发成本太高;
  4. 只提供 Map 和 Reduce 两个操作,很多比较复杂的数据处理场景虽然也能用这两个操作实现,但实现过于复杂而且会让任务变得庞大难以维护;
  5. MR 任务中,每个 job 计算结果都会存储在 HDFS 中,因此每次计算都需要硬盘的读取和写入,延迟比较高;
  6. 只支持批处理缺乏对流的支持。

MR 出现之后,很多人想办法对其进行优化,其中发展到现在比较成熟的就是 Spark。

Spark 的优势

首先,Spark 中最基本的数据抽象是 RDD(Resilient Distributed Dataset),它代表一个可以被分区的只读数据集,它内部可以有很多分区,每个分区又有大量的数据记录。

RDD 是 Spark 的最基本数据结构,Spark 封装了很多对 RDD 操作的算子,使得对 RDD 操作更加清晰简洁,开发者在使用时不用需要再去套用各种 MR 的设计模式,开发变得简单

Spark 的中间数据会缓存在内存中,从而减少很多由硬盘读写导致的延迟,大大加快了处理速度,这是 Spark 数据处理最大优势。

另外,在任务(task)级别上,Spark 的并行机制是多线程模型,而 MR 是多进程模型(每个 Map 和 Reduce 任务都是一个 JVM 进程)。

Spark 生态(图片来自极客时间)

Spark 目前也支持了五个主要的扩展库,分别是 Spark SQL、Spark Streaming(目前主要是 Structured Streaming)、MLlib、GraphX、SparkR。

总结

前面说了这么多 MR 的缺点,难道 MR 真的就这么不堪么?明显不是的,MR 为我们打开了一个分布式大数据计算引擎的大门,它是一个开创性的产品,它的架构设计思想影响后来很多分布式计算系统的设计,这也是我一直认为 Jeff 是神一样存在的原因,Jeff 引领了很多分布式系统方向,我们常说的世界级大牛做到一个就已经非常非常厉害,但 Jeff 就是这么牛逼。

另外,Spark 其实并没有全新的理论基础,它主要是从工程上做得优化,其实 Flink 也是,DataFlow 模型是 Google 提出来的,Flink 在开源产品里是最接近 DataFlow 思想的,Flink 在设计和实现时,很多的工程实现又借鉴了 Spark 的实现,不过它们也都是很牛逼的产品,不断引领分布式计算这个领域的前进方向。

有兴趣的同学,可以通过下面的链接购买,会有一些优惠

二维码扫描购买有一定优惠