文章目录
- 一.Spark介绍
- 二.Spark特点
- 三.Spark核心术语
- 四.Spark运行流程
- 五.Spark安装
一.Spark介绍
Spark 是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,其用于大规模数据处理的统一分析引擎。它提供了 Scala、Java、Python 和 R 中的高级 API,以及支持用于数据分析的通用计算图的优化引擎。它还支持丰富的高级工具集,包括用于 SQL 和 DataFrames 的 Spark SQL、用于 Pandas 工作负载的 Pandas API on Spark、用于机器学习的 MLlib、用于图形处理的 GraphX 和用于流处理的结构化流。
二.Spark特点
1.运行速度迅速:Spark基于内存进行计算(当然也有部分计算基于磁盘,比如shuffle),内存计算下,Spark 比 Hadoop 快100倍。。
2.容易上手开发:Spark的基于RDD的计算模型,比Hadoop的基于Map-Reduce的计算模型要更加易于理解,更加易于上手开发,实现各种复杂功能,比如二次排序、topn等复杂操作时,更加便捷。
3.超强的通用性:Spark提供了Spark RDD、Spark SQL、Spark Streaming、Spark MLlib、Spark GraphX等技术组件,可以一站式地完成大数据领域的离线批处理、交互式查询、流式计算、机器学习、图计算等常见的任务。
4.集成Hadoop:Spark并不是要成为一个大数据领域的“独裁者”,一个人霸占大数据领域所有的“地盘”,而是与Hadoop进行了高度的集成,两者可以完美的配合使用。Hadoop的HDFS、Hive、HBase负责存储,YARN负责资源调度;Spark复杂大数据计算。实际上,Hadoop+Spark的组合,是一种“double win”的组合。
5.极高的活跃度:Spark目前是Apache基金会的顶级项目,全世界有大量的优秀工程师是Spark的committer。并且世界上很多顶级的IT公司都在大规模地使用Spark。
三.Spark核心术语
1.Application:创建SparkContext实例对象的Spark用户,也包含Driver程序。
2.RDD:Spark的基本计算单元,是已被分区、被序列化的、不可变的、有容错机制的、并且能够被并行操作的数据集合。
RDD:弹性分布式数据集Resilient Distributed Dataset。
在Spark中一个RDD就是一个分布式对象集合。
创建RDD的三种方式:
1.加载外部数据集
2.在驱动程序中平行化集合
3.通过一个RDD创建新的RDD
RDD两种类型的操作:
1.转换Transformation(将原来的RDD构建成新的RDD,(惰性,lineage血统))
2.动作Action(通过RDD来计算结果,并将结果返回给驱动程序或保存到外部存储系统(如hdfs))惰性求值:
RDD的转化操作都是惰性求值的,这意味着在被调用行动操作之前Spark不会开始计算
这意味着我们在执行map(),filter()等转换操作的时候不会立即执行,spark会先记录需要操作的相关信息,所以我们在调用sparkcontext.textfile(文件路径)时,数据并没有被读取,而是在必要时进行读取的
虽然转化操作是惰性求值的,但还是可以随时通过运行一个行动操作来强制Spark执行RDD 的转化操作.比如使用count().方便我们进行测试
3.Job:和Spark的action相对应,每一个action都会对应一个Job实例,该Job实例包含多任务的并行计算。一个Job包含n个transformation和1个action。
4.Driver Program:运行main函数并新建SparkContext实例的程序。
5.共享变量:在Spark Application运行时可能需要共享一些变量提供给Task或Driver使用。Spark提供了2种:一种是可以缓存到各个节点的广播变量,另一种是只支持加法操作,可以实现求和的累加变量。
6.DAGScheduler:根据Job构建基于Stage的DAG,并提交Stage给Taskscheduler。其划分Stage的依据是RDD间的依赖关系。
7.TaskScheduler:将TaskSet提交给Worker运行,每一个Executor运行什么Task就是在此分配的。
8.Cluster Manager:集群资源管理的外部服务,在Spark上主要有Srandalone和Yarn和Mesos三种集群资源管理器
9.Worker Node:集群中可以运行Application代码的工作节点,相当于Hadoop的slave节点。
10.Executor:在一个Worker Node上为应用启动的工作进程,在进程中负责任务的运行,并且负责将数据存放在内存或磁盘上。每个应用在Worker Node上只会有一个Executor,在Executor内部通过多线程的方式并发处理应用的任务。
11.Task:被Driver送到Executor上的工作单元,它是运行Application的基本单位。通常情况下一个Task会处理一个Split的数据,每一个Split一般就是一个Block快的大小。
12.Stage:一个Job在执行前会被系统拆分成一组或多组任务,每一组任务称为Stage。
13.Persist/Cache:通过rdd的persist方法可以将rdd的分区数据持久化在内存或硬盘中,通过cache方法会缓存到内存中。
14.Checkpoint:调用rdd的checkpoint方法可以将rdd保存到外部存储中,如硬盘会hdfs。Spark引入checkpoint机制是因为持久化的rdd数据有可能丢失或被替换,checkpoint可以在这个时候发挥作用,避免重新计算。创建checkpoint是在当前job完成后由另外一个专门的job完成:也就是说需要checkpoint的rdd会被重新计算两次。因此在使用rdd.checkpoint()的时候建议加上rdd.cache(),这样第二次运行的job就不用再去计算该rdd了。
15.Shuffle:有一部分transformation或action会让rdd产生宽依赖,这个过程就像是将父rdd中所有分区的record进行了shuffle洗牌,数据被打散重组,例如属于transformation操作的join以及属于action操作的reduce等都会产生shuffle。
16.Cluster Manager:在集群上获取资源的外部服务,目前有三种类型:
Standalone:Spark原生的资源管理器,由Master负责资源的分配。
Apache Mesos:与Hadoop MapReduce兼容性良好的一种资源调度框架。
Hadoop Yarn:主要是指Yarn中的ResourceManager。
四.Spark运行流程
Spark的Application在运行时,首先在driver程序中创建sparkcontext,将其作为调度的总入口,在其初始化过程中会分别创建DAGSchedular(进行Stage调度)和TaskSchedular(进行Task调度)两个模块。
DAGSchedular时基于Stage的调度模块,它为每个Spark Job计算具有依赖关系的多个Stage任务阶段,然后将每个Stage划分为具体的一组任务以TaskSet的形式提交给底层的TaskScheduler来具体执行。
TaskScheduler负责具体启动任务。