Spark是2009年诞生,2014年成为Apache项目,2016年发布了Spark2.0,2019年10月Spark3.0预览版,2020年6月18日Spark3.0正式版发布
Spark是一个大数据领域的统一分析引擎。
Spark使用Scala语言进行实现,它是一种面向函数式编程语言,能够像操作本地集合一样轻松的操作分布式数据集。
Spark具有运行速度快、易用性好、通用性强和随处运行的特点。
Spark运行模式
Spark应用程序可以运行在本地模式(Local Mode)、集群模式(Cluster Mode)和云服务(Cloud),方便开发测试和生产部署。
核心模块
SparkCore-Spark核心
SparkCore中提供了Spark最基础与最核心的功能,Spark其他功能如:Spark SQL,Spark Streaming, GraphX,MLlib都是在Spark Core的基础上进行扩展的
Spark SQL-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面向图计算提供的框架与算法库。
Spark3.0对比Spark2.x的优化
- 动态分区裁剪(Dynamic Partition Pruning)
- 自适应查询执行(Adaptive Query Execution)
- 加速度感知调度(Acclerator-aware Scheduling)
- 更好的API扩展(Better-API-Extensions-DataSourceV2)
- 更好的ANSI-SQL兼容(ANSI SQL Compatible)
- SparkR向量化读写(Vectorization)
Spark与Hadoop-MapReduce的对比
Hadoop-MapReduce | Spark | |
---|---|---|
数据结构 | 磁盘HDFS文件 | 内存构建弹性分布式数据集RDD对数据进行运算和cache |
编程范式 | Map+Reduce | DAG:Transformation+Action |
数据读写性能 | 计算中间结果落到磁盘,IO及序列化、反序列化代价大 | 计算中间结果在内存中,维护存取速度比磁盘高几个数量级 |
任务执行方式 | Task以进程的方式维护,需要数秒时间才能启动任务 | Task以线程的方式维护,对于小数据集读取能够达到亚秒级的延迟 |
注意:
1Spark不能完全替代Hadoop,Spark主要用于替代Hadoop中的MapReduce计算模型。存储依然可以使用HDFS,但是中间结果可以存放在内存中;调度可以使用Spark内置的,也可以使用Hadoop中的调度系统YARN
Hadoop可以使用廉价的、异构的机器来做分布式存储与计算,但是Spark对硬件的要求稍高一些,对内存与CPU有一定的要求。