在前面几篇博客里,介绍了Spark的伪分布式安装,以及使用Spark Shell进行交互式操作,本篇博客主要是对Spark整体上进行梳理。
Spark的几个特点
- Spark是基于内存的计算,比基于磁盘的Hadoop Map Reduce快了百倍的数量级
- Spark MapReduce操作更丰富更灵活
- Spark通过一个技术栈,提供完整的针对大数据计算的生态系统
Spark速度快
1. Hadoop MapReduce磁盘级计算模型
Hadoop MapReduce计算模型是磁盘级的计算,下图是Hadoop权威指南上很经典的一幅关于MapReduce计算过程的截图,
Hadoop MapReduce将每个计算任务都划分为Map、Shuffle和Reduce三个阶段,Map的输入和输出要读写磁盘,Reduce的输入和输出也要读写磁盘,这对于通过递归迭代算法来解决的问题,如机器学习和数据挖掘,无疑在性能上产生很大的影响。
从上图可以看到,所有的查询操作转换为MapReduce程序之前去读写磁盘,这对于交互式的即席查询,速度上也是难以接受的
2. Spark内存级计算模型
Spark将数据加载到内存中之后,此后的计算都在内存中进行,这就非常适合递归迭代的计算任务,同时对交互式即席查询型任务也能做到将数据加载到内存中,如下图所示。
Spark的DAG(有向无环图作业),Spark实现了非常精致的作业调度系统,这是Spark的精髓所在,以后会对它进行详解
在上图中,可以看到Worker节点上的Block Manager会连接HDFS,S3等文件存储系统,即Spark通过Block Manager统一处理Spark与下游的存储系统的交互
3.Spark与Hadoop计算模型的对比
Spark和Hadoop都是基于MapReduce的计算模型。Spark相对于Hadoop,除了速度快之外,还有一个是Spark提供了更多的对数据集的操作(Hadoop只提供了Map和Reduce两种操作),Spark将操作分成两类:
- Transform 比如map, filter, flatMap,sample,groupByKey, reduceByKey, union, join, cogroup, mapValues, sort,partionBy等多种操作
- Action 比如count, collect, reduce,lookup, saveAsTextFile等
这些多种多样的数据集操作类型,给上层应用者提供了方便。各个处理节点之间的通信模型不再像Hadoop那样就是唯一的Shuffle一种模式。用户可以命名,物化,控制中间结果的分区等。可以说编程模型模型比Hadoop更灵活也更丰富
Spark完整的生态系统
Spark还有一个非常大的特性是它通过一个技术栈解决大数据相关的各种类型的计算问题,比如批处理、实时流计算以及即席查询,而这些不同应用场景的计算模式之间可以实现结果共享,同时,针对不同应用场景的开发人员可以互相借鉴学习彼此的知识。 Spark有个响亮的口号叫"One Stack to rule them all", 用一个技术栈解决大数据所有的计算问题...一个技术栈解决所有大数据相关的计算问题并且可以做到结果在不同的计算问题间共享,这正是大数据计算走向成熟的标志,当牛逼的伯克利加州分校把这个实现的时候,普通程序员只能兴叹一句,大数据计算就应该是这个样子...
目前,Spark已经构建了完整的大数据计算生态系统,Spark已经成为了大数据的通用计算平台
- 即席查询 SparkSQL
- 数据挖掘与机器学习 MlLIB
- 图计算 GraphX
- 实时流计算 Spark Streaming
Spark的运行架构
数据来源
如上图所示,Spark关注于计算问题,而没有提供数据存储的解决方案,Spark使用已有的存储技术/系统来为它提供计算的数据数据。Spark可以使用HDFS(主要)、Amazon S3、Hypertable、HBase等作为数据的输入源。
运行模式
如上图所示,Spark可以有五种运行模式:
- Local
- Standalone
- EC2
- Mesos 类似于YARN
- YARN YARN极有可能成为分布式计算中,计算资源(CPU、内存)统一管理、分配以及任务调度的标准组件
Spark的作业执行流程
同DAG一样,Spark作业执行流程是Spark的精华部分,尽快研究之。