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