SparkCore
0 主要内容
SparkCore的核心内容主要讲的就是SparkCore的三大数据结构:
- 1 RDD:分布式数据集
- 2 广播变量:分布式只读共享变量
- 3 累加器:分布式只写共享变量
1 RDD
1.1 RDD定义
- RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据(逻辑计算)抽象。代码中是一个抽象类,它代表一个不可变、可分区、里面的元素可并行计算的集合;
- RDD作为一个集合,内部存储的并不是数据,而是计算的逻辑;
定义中几个方面的理解:
- 1 数据集:存储的是计算的逻辑;
- 2 分布式:数据的来源 & 计算 & 数据的存储;
- 3 弹性(灵活、可变性):
- 血缘(依赖关系):Spark可以通过特殊的处理方案简化依赖关系;
- 计算:Spark的计算是基于内存的,所以性能特别高,同时可以和磁盘灵活切换;
- 分区:Spark在创建默认分区后,可以通过指定的算子来改变分区数量;
- 容错:Spark在执行计算时,如果发生了错误,需要进行容错重试处理;
- 4 Spark中的数量:
- Executor:可以通过提交应用的参数进行设定;
- partition:
- 默认情况下,读取文件采用的是Hadoop的切片规则,如果读取内存中的数据,可以根据特定的算法进行设定,可以通过其他算子进行改变;
- 在多个阶段的场合,下一个阶段的分区数量取决于上一个阶段最后RDD的分区数;但是可以在相应的算子中进行修改;
- stage:
- 1(ResultStage) + shuffle依赖的数量(ShuffleMapStage);
- 划分阶段的目的是为了任务执行的等待,因为shuffle的过程需要落盘;
- Task:原则上一个分区就是一个任务。但是实际应用中,可以动态调整;
1.2 RDD创建
三种方式:
- 从集合(内存)中创建RDD;
- 从外部存储创建;
- 从其他RDD创建;
1.3 RDD的属性
- 分区;
- 依赖关系;
- 分区器;
- 优先位置;
- 如果数据是存在内存中,这样有些节点上就会有数据,有的节点上没有数据,有数据的节点就可以称之为优先位置;但是如果数据是存放在数据库中,对每个节点而言都要从数据库去获取数据,这时就没有优先位置的概念了。
- 计算函数;
1.4 使用(RDD转换和行动算子)
转换算子:
- 单Value类型;
- 双Value类型;
- K - V类型;
行动算子(runJob)
2 广播变量(优化策略)
广播变量(优化策略):分布式共享只读数据
3 累加器
累加器:分布式共享只写数据(需要返回数据的)
来源:oschina
链接:https://my.oschina.net/u/4419899/blog/4467907