01 初识 Spark 你应该知道的

首先来假设一下读者看过我前面写的关于 MapReduce 的文章,尤其是关于Shuffle 详解的那篇,其中提到的很多的就是磁盘读写。

所以必须强调一点因为 Shuffle 以及 MapReduce 的计算模型决定了 MapReduce 适合处理对速度不敏感的离线批处理任务。那么要是把磁盘读写的这个过程换成在内存中迭代处理会怎么样呢?重要的事先思考3分钟。

1.Spark是什么?

Spark,是一种通用的大数据计算框架,正如传统大数据技术 Hadoop 的 MapReduce、Hive 引擎,以及 Storm 流式实时计算引擎等。

Spark 包含了大数据领域常见的各种计算框架:比如 Spark Core 用于离线计算,Spark SQL 用于交互式查询,Spark Streaming 用于实时流式计算,Spark MLlib 用于机器学习,Spark GraphX 用于图计算。

Spark 主要用于大数据的计算,而 Hadoop 主要用于大数据的存储(比如 HDFS、Hive、HBase 等 ),以及资源调度( Yarn )。

2.为什么要用Spark?

速度快:Spark 主要基于内存计算,部分基于磁盘( 比如 Shuffle )。

易用性好:Spark基于RDD的计算模型比 Hadoop 的 MapReduce 计算模型易于理解且支持使用Scala、Java、Python 和 R语言进行编程。

通用性强:Spark 提供了Spark RDD、Spark SQL、Spark Streaming、Spark MLlib、Spark GraphX 等技术组件,可以一站式地完成大数据领域的离线批处理、交互式查询、流式计算、机器学习、图计算等常见的任务。

易集成:可以独立在集群模式中运行,也可以跟 Hadoop 高度集成,Hadoop 的HDFS、Hive、HBase 负责存储,YARN 负责资源调度;Spark 复杂大数据计算。

3.Spark 对比 MapReduce

前面的文章中已经说过 Hadoop 用廉价的普通硬件解决大数据的存储( HDFS )和计算( MapReduce )的问题, Spark 是借鉴 MapReduce 之上发展来的,继承了分布式并行计算的优点,并改进了 MapReduce 的缺陷,但是 Spark 不提供存储功能。

MapReduce 的计算模型非常死板,必须基于 Map-Reduce 模式,必须基于磁盘,以及不同节点间大量数据的网络传输。

Spark 计算主要基于内存(少数基于磁盘),迭代运算效率高,Spark 的 Shuffle也是要基于磁盘,但是其大量的 transformation 操作,比如单纯的map,filter 等都是直接基于内存进行计算的,速度性能大幅提升。

Spark 跟 MapReduce 最大的不同在于迭代式计算模型,MapReduce 计算模型分为 2 个阶段,Map 和 Reduce,这两个阶段处理完成就结束了,我们在一个作业中能做的处理比较受限,而 Spark 计算模型可以分为多个阶段,因为它是内存迭代式的,一个阶段的任务处理完成后可以往下继续处理,可持续 N 个阶段,Spark 对比 MapReduce 来说计算模型更强大。

综上来说:Spark 好像很牛逼的感觉,那么 Spark能替代 Hadoop 吗???

就个人理解来说 Spark 是没有办法完全替代 Hadoop 的,但是可以替代一部分,就是 Hadoop 的计算框架 MapReduce ,Hive 查询引擎(底层基于 MapReduce 计算的)。

Spark 也是有存在不足的,Spark 是基于内存计算的,语法使用简单,但是真正面对超大量的数据时(比如几十亿级别),就需要进行各种调优操作,不然很容易出现各种问题,比如最常见的 out of memory (OOM)内存溢出等,导致Spark 任务都没办法完成运行就挂了,而 MapReduce 是可以龟速前进完成计算的。

4.Spark基本工作原理

如图每个红框所示,每一批节点上的数据实际上就是一个 RDD,因为是分布式,所以数据都散落在一批节点上,每个节点都存储了 RDD 的部分 partition 数据。操作完成1中的任务后,处理完成的数据会移到下一批节点的内存中,如1->2->3数据迭代计算,将最终的计算结果输出。

5.RDD的特点

1、RDD 是 Spark 提供的核心抽象,全称为 Resillient Distributed Dataset,即弹性分布式数据集。

2、RDD 在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让 RDD 中的数据可以被并行操作。(分布式数据集)

3、RDD 通常通过 Hadoop 上的文件,即 HDFS 文件或者 Hive 表,来进行创建;有时也可以通过应用程序中的集合来创建。

4、RDD 最重要的特性就是,提供了容错性,可以自动从节点失败中恢复过来。即如果某个节点上的 RDD partition,因为节点故障,导致数据丢了,那么RDD 会自动通过自己的数据来源重新计算该 partition。这一切对使用者是透明的。

5、RDD 的数据默认情况下存放在内存中的,但是在内存资源不足时,Spark会自动将RDD数据写入磁盘。(弹性)

细心的读者可能发现了标题上的 01,没错,接下来会是关于 Spark 的一系列文章,从架构到细节,计算流程,性能优化等逐渐深入剖析介绍,敬请关注!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180630G00F1100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券