一、Spark概述
1.1、Spark是什么
Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。
1.2、Spark和Hadoop
1.2.1、从时间来看
Hadoop:2013年10月发布2.X(YARN)版本;
Spark:2013年6月,Spark成为Apache基金会下的项目。
1.2.2、从功能上来看
hadoop
- Hadoop是用Java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架。
- HDFS作为Hadoop分布式文件系统,HDFS处于Hadoop生态圈的最下层,存储着所有数据,支持着Hadoop的所有服务。
- MapReduce是一种编程模型,作为Hadoop的分布式计算模型,是Hadoop的核心。基于这个框架,分布式并行程序的编写变得异常简单,Hadoop在处理海量数据时,性能的横向扩展变得非常容易。
- HBase是一个基于HDFS的分布式数据库,擅长实时地随机读写超大规模数据集。
Spark
- Spark是一种由Scala语言开发的快速、通用、可扩展的大数据分析引擎。
- Spark Core中提供了Spark最基础与最核心的功能。
- Spark SQL是Spark用来操作结构化数据的组件。
- Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的API。
1.3、Spark和Hadoop的选择
- Hadoop MapReduce由于其设计初衷并不是为了满足循环迭代式数据流处理 ,因此在多并行运行的数据可复用场景(如:机器学习)中存在诸多计算效率等问题。因此Spark应运而生,Spark就是在传统的 MapReduce计算框架上,利用其计算过程的优化,从而大大加快了数据分析、挖掘的运行和读写速度,并将计算单元缩小到更适合并行计算和重复使用的RDD使用模型。
- 机器学习中ALS、凸优化梯度下降等。这些都需要基于数据集或者数据集衍生数据反复查询反复操作,MR这种模式不太合适。而Spark所基于的scala语言恰恰擅长函数的处理。
- Spark是一个分布式数据快速分析项目。他的核心技术是弹性分布式数据集提供了比MapReduce丰富的模型,可以快速在内存中对数据集进行多次迭代,来执行复杂的数据挖掘算法和图形计算算法。
- Spark和Hadoop的根本差异是多个作业之间的数据通信问题:Spark多个作业之间数据通信是基于内存,而Hadoop是基于磁盘
1.4、Spark的核心模块
- Spark Core
Spark Core中提供了Spark最基础与最核心的功能,Spark其他的功能:Spark SQL、Spark Streaming,GraphX、 MLlib都是在Spark Core的基础上进行扩展的。 - Spark SQL
Spark SQL是Spark用来操作结构化数据的组件。通过Spark SQL,用户可以用SQL或者HQL来查询数据。 - Spark Streaming
Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的API。 - Spark MLlib
MLlib是Spark提供的一个机器学习算法库。MLlib不仅提供了模型评估、数据导入等额外的功能,还提供了一些更底层的机器学习原语。 - Spark GraphX
GraphX是面向图计算提供的框架与算法库。