Spark核心组件
Driver
- 将用户程序转化为作业(job)
- 在Executor之间调度任务(task)
- 跟踪Executor的执行情况
- 通过UI展示查询运行情况
Executor
- Spark Executor是集群中工作节点(Worker)中的一个JVM进程,负责在 Spark 作业中运行具体任务(Task),任务彼此之间相互独立。
- 负责运行组成Spark应用的任务,并将结果返回给驱动器进程
- 它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。RDD 是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
并行度(Parallelism)
在分布式计算框架中一般都是多个任务同时执行,由于任务分布在不同的计算节点进行计算,所以能够真正地实现多任务并行执行,记住,这里是并行,而不是并发。这里我们将整个集群并行执行任务的数量称之为并行度。
提交流程
Spark核心编程
三大数据结构分别是:
- RDD : 弹性分布式数据集
- 累加器:分布式共享只写变量
- 广播变量:分布式共享只读变量
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据处理模型。
- 分区列表
RDD数据结构中存在分区列表,用于执行任务时并行计算,是实现分布式计算的重要属性。
- 分区计算函数
Spark在计算时,是使用分区函数对每一个分区进行计算
- RDD之间的依赖关系
RDD是计算模型的封装,当需求中需要将多个计算模型进行组合时,就需要将多个RDD建立依赖关系
- 分区器(可选)
当数据为KV类型数据时,可以通过设定分区器自定义数据的分区
- 首选位置(可选)
计算数据时,可以根据计算节点的状态选择不同的节点位置进行计算
RDD创建
Spark中创建RDD的创建方式可以分为四种:
1) 从集合(内存)中创建RDD
从集合中创建RDD,Spark主要提供了两个方法:parallelize和makeRDD
2) 从外部存储(文件)创建RDD
由外部存储系统的数据集创建RDD包括:本地的文件系统,所有Hadoop支持的数据集,比如HDFS、HBase等。
3) 从其他RDD创建 不常用
主要是通过一个RDD运算完后,再产生新的RDD。详情请参考后续章节
4) 直接创建RDD(new) 不常用
使用new的方式直接构造RDD,一般由Spark框架自身使用。
RDD转换算子
RDD 中的所有转换都是延迟加载的,也就是说,它们并不会直接计算结果。
RDD根据数据处理方式的不同将算子整体上分为Value类型、双Value类型和Key-Value类型
map,filter,flatMap,mapPartitions,mapPartitonsWithIndex,sample,takeSample,union,intersection,distinct,partitionBy,reduceByKey,groupByKey,combinByKey,aggregateByKey,foldByKey,sortByKey,sortBy,join,cogroup,cartesian,pipe,coalesce,repartition,repartitionAndSortWithinPartitons,glom,mapValues,subtract
RDD行动算子
- 数据运算类,主要用于触发RDD计算,并得到计算结果返回给Spark程序或Shell界面;
- 数据存储类,用于触发RDD计算后,将结果保存到外部存储系统中,如HDFS文件系统或数据库
aggregate、collect、count、first、foreach、reduce、take、takeOrdered、takeSample、saveAsObjectFile、saveAsTextFile