Spark的基本介绍
1.1 什么是Spark
定义: Spark是一款用于大规模数据处理分布式的分析引擎
MR: 是一款用于大规模的分布式的分析引擎
MR存在的弊端:
1- 计算效率慢: 大量的经过磁盘和内存之间的交互, 基于磁盘计算 IO比较大 (IO密集型框架)
2- 使用API相对比较低级:大量的功能代码都需要程序员自己完成
3- 迭代计算非常不方便
什么是迭代计算:
在计算过程中, 需要将计算划分为N个阶段, 每个阶段之间互相依赖, 后一个阶段必须等待前一个阶段执行完成, 然后才能执行后一个阶段
对于市场来说, 虽然说离线计算对实时性要求一般不是特别高,但是依然希望能够计算的越快越好,所以在这样的背景下, 迫切需要一款能够支持大规模的分布式计算的引擎,同时能够有非常高效的迭代计算性能
Spark其实就是在这样的背景下, 逐步产生了出来
Spark最早是来源于加州伯克利分校一帮博士以及教授共同发布的一篇论文而产生的, 论文: 弹性分布式数据集
RDD: Spark的核心, 也是后续讲解Spark Core中最核心的数据结构, 目前可以先理解为就是一个庞大的容器, 整个迭代计算操作, 都是基于这个容器来进行, 整个计算可以基于内存来进行迭代
RDD出现, 提供了更加高效的计算平台, 同时也提供了更加高阶的API
Spark的开发语言: Scala
官方网站: https://www.spark.apache.org apache旗下的顶级开源项目
为什么说Spark运行效率要优于MR:
1- Spark提供了全新的数据结构: RDD 支持在内存中进行计算, 部分迭代操作支持内存迭代
2- Spark程序是基于线程来运行,而MR是基于进程来运行的, 线程的启动和销毁是由于进程的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G9PBWdJ8-1673855011745)(assets/1673352113352.png)]
1.2 Spark的发展史
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Pr8cs37-1673855011747)(assets/1673352292336.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgYXDFfb-1673855011747)(assets/1673352421826.png)]
pyspark本质就是一个python的库, 主要是用于操作Spark, 近年来这个库下载量也在不断的提升, 意味着整个适用人群也在不断的提升, 同时官网已经python作为操作Spark的第一语言了..
1.3 Spark的特点
- 1- 运行速度快
原因一: 提供了一个全新的数据结构 RDD(弹性的分布式数据集)
整个计算操作, 基于内存计算, 当内存不足的时候, 可以放置到磁盘上
原因二: 整个Spark是基于线程来运行的, 线程的启动和销毁是优于进程
- 2- 易用性
原因一: Spark提供了多种操作语言的API, Python SQL scala Java R
原因二: Spark提供非常多的高阶API, 而且这些API在不同的语言中操作基本都是类似的, 大大降低了程序员学习成本
- 3- 通用性
Spark是由多个组件组成的, 主要有 Spark Core, Spark SQL, Spark Streaming, Spark MLib, Spark GraphX
Spark Core: Spark的核心, 学习Spark的基础,学习Spark Core主要学习RDD 重点学习内容(基础)
主要维护RDD数据结构
提供RDD各种API
提供了与内存相关的API
Spark SQL: 通过SQL的方式来操作Spark 重点学习部分(应用)
Spark Streaming:Spark用于进行流式计算(实时计算)的组件 暂不学习
在国内, 整个实时部分, 主要是应用在Flink, 而非Spark Streaming ,因为Spark的流并不是真正意义上流式计算, 为微批处理
Spark MLib: Spark用于进行机器学习的库 专门针对特定人群
Spark GraphX: Spark用于进行图计算的库 专门针对特定人群
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uf71YlUh-1673855011748)(assets/1673352954422.png)]
- 4- 随处运行
原因一: 编写好的Spark程序, 可以被提交到多个不同的资源平台上运行: Local Spark集群(standlone),Yarn平台, 以及其他支持Spark运行的平台...
原因二: Spark框架可以和多种软件进行集成, 集成后, 可以非常方便的对接不同软件进行数据处理