一、RDD:Resilient Distributed DateSet,弹性分布式数据集
五大特性
- 是由一系列partition组成
- 函数作用在每个partition上
- partition之间有一系列依赖关系
- 分区器作用在K,V格式的RDD上
- RDD提供一些列最佳的计算位置
1.默认情况下,一个block对应一个partition
2.RDD并不存储数据,我的理解是:
RDD就是一些套在数据上的计算,当获取的数据经过这些RDD时,就会被加工成自己想要的数据
3.如果进过本次RDD出来的数据格式是二元组格式,则本次RDD称为K,V格式的RDD
二、Spark任务执行原理
1.Driver和Worker是运行在节点上的进程,运行在JVM中的进程
2.Driver与集群节点之间有频繁的通信
3.Driver负责任务(task)的分发、结果的回和任务的调度。如果结算结果很大,就不要回收了,会造成oom(out of memory)
4.Worker是standalone资源调度框架里面资源管理的从节点。也是JVM进程
5.Master是standalong资源管理框架里面资源管理的主节点,也是JVM进程
三、Spark代码流程
- 创建SparkConf对象
设置master,conf.setMaster("")
详情:https://www.jianshu.com/p/aaac505908dd
设置appName,conf.setAppName("") - 创建SparkContext上下文对象,需要以conf作为参数
- 基于上下文对象SparkContext创建一个RDD,对RDD做各种操作
- 使用Action类算子触发Transformation算子
- 关闭SparkContext:sc.stop()
四、算子
Transformation:转换类算子,该类算子懒加载执行,即在调用的时候并不会立即执行。
1.filter:过滤符合条件的记录,返回true时保留,返回false过滤
2.map:将RDD中的每个数据项,映射为一个新的数据项。输入A,输出B
3.flatMap:与map类似,先map,再flat。将一个数据项映射为0到多个元素。
4.sample:随机抽样,根据传进去的比例(小数)进行抽取相应数据,true放回,false不放回。当设置了第三个参数时,如果参数一致,则每次执行或在不同机器上执行,对同一数据集结果相同
5.reduceByKey:对相同Key的数据做相关操作
6.sortBy/sortByKey:作用在K,V格式的RDD上,对数据进行排序,默认是升序,false设置降序。sortByKey以key进行排序。sortBy需要自己指定排序的数据项
Action:执行类算子。在调用该类算子时会立刻执行。在加工数据时遇到的Transformation算子都会被触发,一个Application应用中可以有多个Action,一个Action对应一个job。
1.count,返回数据集中的元素数量。会在结果计算完成后将计算结果返回给Driver
2.take(num),返回一个数据集中的前num个元素的集合
3.first,返回一个数据集中的第一个元素,底层是通过take(1)获取的
4.foreach,遍历数据集中的每一个元素,执行相关处理
5.collect,将数据集拉取到Driver端