Spark编程-----二次排序和分组取TopN
RDD的宽窄依赖
宽依赖:每一个父RDD的Partition中的数据,都可能传输到子RDD的每个Partition中,这种错综复杂的关系,叫宽依赖
宽依赖划分依据:Shuffle
窄依赖:一个RDD对它的父RDD,只有一个一对一的依赖关系,也就是说,RDD的每个Partition,仅仅依赖于一个父RDD的Partition,一对一的关系叫窄依赖
窄依赖划分依据:没有Shuffle
Join有一个特殊情况,虽然Join是Shuffle算子,但是也会触发窄依赖
例如:
血缘
父RDD与子RDD直接存在依赖关系,这种依赖关系叫血缘,同时通过血缘关系,可以达到容错的机制(RDD之间的容错)
案例:基站解析案例
根据用户产生日志的信息,在那个基站停留时间最长
19735E1C66.log 这个文件中存储着日志信息
文件组成:手机号,时间戳,基站ID 连接状态(1连接 0断开)
lac_info.txt 这个文件中存储基站信息
文件组成 基站ID, 经,纬度
在一定时间范围内,求所用户经过的所有基站所停留时间最长的Top2
思路:
1.获取用户产生的日志信息并切分
2.用户在基站停留的总时长
3.获取基站的基础信息
4.把经纬度的信息join到用户数据中
5.求出用户在某些基站停留的时间top2
案例:统计某时间段学科访问量TopN
统计每个时间段内的学科访问量Top2
Spark任务提交流程(重点)
Checkpoint(检查点)
Checkpoint相当于缓存,但是 他保存的位置是磁盘,并且是永久性保存,会保存到HDFS,这个检查点,比较持久化来说,数据更安全,但是效率很低,一般在程序中设置的位置较少,没有持久化效率高
功能可以在集群运行时候,如果发生了宕机情况 ,可以通过检查点恢复检查点数据
应用场景:在特别复杂的RDD依赖中,可以使用检查点机制,因为依赖过多,可能会发生集群宕机情况,所以在适合的位置设置检查点是有必要的