1.SparkConf
Spark配置对象,设置各种参数,使用kv类型。
2.SparkContext
spark主要入口点,代表到spark集群的连接,可以创建
rdd、累加器和广播变量。
每个JVM中只能有一个SparkContext,启动新的SparkContext必须stop的原来的。
val rdd1 = sc.textFile()
3.RDD
rdd有依赖列表.
弹性分布式数据库,是spark的基本抽象,表示为不可变的、分区化的集合,可用于并行计算。
该类包含基本操作,map、filter、persist。
对于kv类型的rdd,方法封装在PairRDDFunction类中。
轻量的集合,里面没有数据。
内部有5大属性:
1.分区列表
2.计算每个切片的函数
3.到其他RDD的依赖列表
4.(可选)针对kv类型RDD的分区类
5.(可选)计算每个的首选的位置列表。
RDD常见操作
------------------
rdd都是延迟计算的,只有调用action方法时,才会触发job的提交。
1.变换
只要返回新的RDD就是transform。
map
filter
flatMap
mapPartitons //对每个分区进行变换处理
sample
union
distinct
intersection
groupByKey //没有combine过程,可以改变v类型
reduceByKey //有combine过程,不能改变v类型
join
2.action
2.1)collect
2.2)foreachPartition //迭代每个分区,
4.Dependency
依赖,
指的是子RDD的每个分区和父RDD的分区之间数量的对应关系。
Dependency
|
|---NarrowDependency(窄依赖)
|----OneToOne依赖(一对一依赖)
|----Range依赖(范围依赖)
|----Prune依赖(修剪依赖)
|---ShuffleDependency(宽依赖)
4.Stage
阶段是并行任务的集合,由调度器运行DAG图根据shuffle进行划分成若干stage。
阶段分两种类型:ShuffleMapStage和ResultStage
1.ShuffleMapStage
该阶段的输出是下一个阶段的输入,跟踪每个节点的输出情况。
一个阶段会重试执行多次处于容错考虑。
由多个ShuffleMapTask构成。
2.ResultStage
在某些分区上应用计算函数,有些操作例如take(n)/first()没必要在所有分区上执行的。
结果阶段的输出结果回传给driver.
由多个ResultTask构成。
5.Task
Spark执行的最小单位,有两种类型,和Stage相对。
1.ShuffleMapTask
2.ResultTask
执行任务,并将结果回传给driver。
6.job
每个action是一个job。
7.Application
一个应用有多个job,对应一个SparkContext。