Spark 是美国加州大学伯克利分校的 AMP 实验室(主要创始人 lester 和 Matei)开发的 通用的大数据处理框架。
Apache Spark™ is a fast and general engine for large-scale data processing.
Apache Spark is an open source cluster computing system that aims to make data analytics fast,both fast to run and fast to wrtie
Spark 应用程序可以使用 R 语言、Java、Scala 和 Python 进行编写,极少使用 R 语言 编写 Spark 程序,Java 和 Scala 语言编写的 Spark 程序的执行效率是相同的,但 Java 语言写 的代码量多,Scala 简洁优雅,但可读性不如 Java,Python 语言编写的 Spark 程序的执行效 率不如 Java 和 Scala。
Spark 有 4 中运行模式:
1. local 模式,适用于测试。
2. standalone,并非是单节点,而是使用 spark 自带的资源调度框架 。
3. yarn,最流行的方式,使用 yarn 集群调度资源 。
4. mesos,国外使用的多。
Spark 比 MapReduce 快的原因:
1. Spark 基于内存迭代,而 MapReduce 基于磁盘迭代
MapReduce 的设计:中间结果保存到文件,可以提高可靠性,减少内存占用,但是牺 牲了性能。
Spark 的设计:数据在内存中进行交换,要快一些,但是内存这个东西,可靠性比不过 MapReduce。
2. DAG 计算模型在迭代计算上还是比 MR 的更有效率。
在图论中,如果一个有向图无法从某个顶点出发经过若干条边回到该点,则这个图是 一个有向无环图(DAG)
![](https://img.haomeiwen.com/i8703762/24d5a9380054d758.png)
DAG 计算模型在 Spark 任务调度中详解!
Spark 计算比 MapReduce 快的根本原因在于 DAG 计算模型。一般而言,DAG 相比 MapReduce 在大多数情况下可以减少 shuffle 次数。Spark 的 DAGScheduler 相当于一个改进 版的 MapReduce,如果计算不涉及与其他节点进行数据交换,Spark 可以在内存中一次性 完成这些操作,也就是中间结果无须落盘,减少了磁盘 IO 的操作。但是,如果计算过程中 涉及数据交换,Spark 也是会把 shuffle 的数据写磁盘的!有一个误区,Spark 是基于内存的 计算,所以快,这不是主要原因,要对数据做计算,必然得加载到内存,Hadoop 也是如 此,只不过 Spark 支持将需要反复用到的数据给 Cache 到内存中,减少数据加载耗时,所 以 Spark 跑机器学习算法比较在行(需要对数据进行反复迭代)。Spark 基于磁盘的计算也 是比 Hadoop 快。刚刚提到了 Spark 的 DAGScheduler 是个改进版的 MapReduce,所以 Spark 天生适合做批处理的任务。Hadoop 的 MapReduce 虽然不如 spark 性能好,但是 HDFS 仍然 是业界的大数据存储标准。
3. Spark 是粗粒度的资源调度,而 MR 是细粒度的资源调度。
粗细粒度的资源调度,在 Spark 资源调度中详解!
Spark任务执行流程
![](https://img.haomeiwen.com/i8703762/1227b6d416824ea1.png)
网友评论