Spark框架
- 一、Spark概述
- 1.1 Spark是什么
- 1.2 Spark & Hadoop
- 1.3 Spark / Hadoop
- (1)Hadoop MapReduce
- (2) Spark
- 1.4 Spark核心模块
一、Spark概述
1.1 Spark是什么
Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。
1.2 Spark & Hadoop
Spark与Hadoop的区别:
Hadoop:
- 用java编写,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架
- 作为Hadoop分布式文件系统,HDFS处于Hadoop生态圈的最下层,存储着所有的数据,支持着Hadoop的所有服务
- MapReduce是一种编程模型,Hadoop根据Google的MapReduce论文将其实现,作为Hadoop的分布式计算模型,是Hadoop的核心。基于这个框架,分布式并行程序的编写变得异常简单。综合了HDFS的分布式存储和MapReduce的分布式计算,Hadoop在处理海量数据时,性能横向扩展变得非常容易
- HBase是对Google的Bigtable的开源实现,但又和Bigtable存在许多不同之处。HBase是一个基于HDFS的分布式数据库,擅长实时地随机读/写超大规模数据集。它也是Hadoop非常重要的组件
Spark:
- Spark是一种由Scala语言开发的快速、通用、可扩展的大数据分析引擎
- Spark Core中提供了Spark最基础与最核心的功能
- Spark SQL是Spark用来操作结构化数据的组件。通过Spark SQL,用户可以使用SQL或者Apache Hive版本的SQL方言(HQL)来查询数据。
- Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的API。
由上面的信息可以获知,Spark出现的时间相对较晚,并且主要功能主要是用于数据计算,所以其实Spark一直被认为是Hadoop 框架的升级版。
1.3 Spark / Hadoop
(1)Hadoop MapReduce
Hadoop设计的时间比较早,其初衷是用于一次性数据计算。
一次性数据计算:框架爱在处理数据的时候,会从存储设备中读取数据,进行逻辑操作,然后将我们处理的结果重新存储到介质中。
这种一次性数据计算在处理复杂数据时性能非常低的。因为MapReduce中的计算引擎中的计算模型比较简单,只有mapper和reducer,这样对于上层应用来说,不得不拆分算法甚至在上层应用实现多个job的串联(就像迭代式计算一样)
上一次的计算结果要给下一次来使用,但作业之间的关联考的试磁盘交互,磁盘IO会十分影响性能
所以MapReduce初期不是为了满足循环迭代式数据的处理,因此在多并行运行的数据可复用场景(如:机器学习、图挖掘算法、交互式数据挖掘算法)中存在诸多计算效率等问题
(2) Spark
spark把作业的计算结果放在了内存中,为下一次的计算提供了更加便利的方式,如此效率会更高
由此可以看出在绝大多数的数据计算场景中,Spark确实会比MapReduce更有优势。但是Spark是基于内存的,所以在实际的生产环境中,由于内存的限制,可能会由于内存资源不够导致Job执行失败,此时,MapReduce其实是一个更好的选择,所以Spark并不能完全替代MR。
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或者Apache Hive版本的SQL方言(HQL)来查询数据。
➢ Spark Streaming
Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的API。
➢ Spark MLlib
MLlib是Spark提供的一个机器学习算法库。MLlib不仅提供了模型评估、数据导入等额外的功能,还提供了一些更底层的机器学习原语。
➢ Spark GraphX
GraphX是Spark面向图计算提供的框架与算法库。