spark视频笔记

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
宽依赖:一对多,必定会发生shuffle操作
窄依赖:一对一

一个DAG就是一个job,一个job分层很多个stage,stage划分的依据是宽依赖,task是由分区数决定的一个rdd分层三个区则对应三个task
每个阶段的task的数量是最后一个rdd的分区数
rdd转换操作和行动操作(也称为算子)
转换操作:
分为单value、双value和key-value的形式
单value:
map、mapPartitions、mapPartitionsWithIndex、flatMap、glom、groupBy、filter、sample、distinct、coalesce、repartition、sortBy、mapvalues
双value:
intersection、union、substract、zip
key-value:
partitionBy、reduceByKey、groupByKey、aggregateByKey、foldByKey、combineByKey、sortByKey、join、leftOuterJoin、cogroup、
groupbyKey性能差于reducebyKey,因为reduce先分区操作了,然后再shuffle操作后,将分区间的数据合并再操作,这个两个算子shuffle过程都是写入文件的,防止数据量导致内存溢出,然后reducebykey的io数据量远远小于groupbykey,但是根据场景的不同可能存在并不需要聚合的情况,这会儿groupbykey就可以使用到了

针对reducebykey区内和区间的操作都一样,当区内区外不一样的时候可以使用aggregrative,实现自定义

持久化的三种方法cache、persist和checkpoint区别,chechpoint存在磁盘
重写分区器
累加器和broadcast[只写和只读]: 累加器的原理:分executor执行,然后driver在执行.executor之间互不影响,Accoumolotor支持自定义,累加器本身不执行,当遇到行动算子的时候才会执行,因而推荐放到行动算子里面,否则可能会多次执行: brocast用于闭包变量共享,否则多少线程数就需要复制多少份数据,现在是通过executor划分的,每个executor一份数据:广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个
或多个 Spark 操作使用

framework框架:工程化代码,整体分为applciantion,controller,service,Dao四部分,再详细分为application: 控制层: 主要用于调度。
service: 服务层: 主要用于执行逻辑。
dao: 持久层: 主要用于数据交互。
application: 应用层: 所有的应用程序从 application 开始启动。
common: 用于存放共通类。
util: 用于存放工具类。
bean: 用于存放实体类。

SCALA类里面main方法可以手写也可以继承自App
scala的case用法不会:map{}写法

windows spark 配置

1
https://blog.csdn.net/l_dsj/article/details/109468288