Spark学习知识点总结_spark

文章目录

  • ​​**一、基础知识:**​​
  • ​​**1、yarn:资源调度框架**​​
  • ​​**2、hdfs(Hadoop Distribute File System),基于“磁盘”的**​​
  • ​​**3、Hadoop MR:map ->shuffle -> reducer**​​
  • ​​**4、Hive:是一个数据仓库**​​
  • ​​**5、spark与MR区别?**​​
  • ​​**6、java中SparkConf设置参数介绍**​​
  • ​​**7、RAM = 内存**​​
  • ​​8、Spark任务提交**​​
  • ​​**9、spark任务流程及算子**​​
  • ​​**11、算子**​​
  • ​​12、standalone​​
  • ​​12.1 standalone-clent模式提交任务流程​​
  • ​​**12.2 standalone-cluster 模式提交任务流程**​​
  • ​​**13、yarn**​​
  • ​​**13.1 yarn-client模式提交任务流程**​​
  • ​​**13.2 yarn-cluster模式提交任务流程**​​
  • ​​**15、spark pipeline计算模式**​​
  • ​​**16、spark资源调度和任务调度**​​
  • ​​**17、ETL?= 抽取+转换+加载**​​
  • ​​**20、kafka**​​
  • ​​**20.1 kafka概述**​​
  • ​​**20.2 定义**​​
  • ​​**20.3 消息队列**​​
  • ​​**20.4 kafka架构**​​
  • ​​**20.5 kafka生产者**​​
  • ​​**20.6 ack和isr**​​
  • ​​**21、spark历史**​​
  • ​​**22、spark内置模块**​​
  • ​​**23、Spark WordCount**​​
  • ​​**24、Spark RDD**​​
  • ​​**24.1 介绍流**​​
  • ​​**24.2什么是RDD**​​
  • ​​**24.3 RDD属性**​​
  • ​​**24.4 RDD创建**​​
  • ​​**24.5 RDD的转换**​​
  • ​​**第一种: Value类型交互**​​
  • ​​**map算子**​​
  • ​​**mapPartitions算子**​​
  • ​​**mapPartitionsWithIndex(分区索引)**​​
  • ​​**flatMap**​​
  • ​​**glom算子**​​
  • ​​**groupBy算子**​​
  • ​​**filter算子**​​
  • ​​**sample算子**​​
  • ​​**distinct算子**​​
  • ​​**coalesce算子**​​
  • ​​**区别partition & task**​​
  • ​​**repartition算子**​​
  • ​​**coalesce 和repartition区别**​​
  • ​​**第二种:双Value类型交互**​​
  • ​​**union算子**​​
  • ​​**subtract算子**​​
  • ​​**intersection算子**​​
  • ​​**zip算子**​​
  • ​​**partitionBy算子**​​
  • ​​**groupByKey算子**​​
  • ​​**reduceByKey算子**​​
  • ​​**区别reduceByKey和groupByKey**​​
  • ​​**aggregateByKey算子**​​
  • ​​**foldByKey算子**​​
  • ​​**combinByKey算子**​​
  • ​​**sortByKey算子**​​
  • ​​**mapValues算子**​​
  • ​​**cogroup算子**​​
  • ​​**第三种:action算子**​​
  • ​​**reduce算子**​​
  • ​​**collect算子**​​
  • ​​**count算子**​​
  • ​​**first算子**​​
  • ​​**take算子**​​
  • ​​**takeOrdered算子**​​
  • ​​**aggregate算子**​​
  • ​​**fold算子**​​
  • ​​**saveAsTextFile算子**​​
  • ​​**SaveAsSequenceFile算子**​​
  • ​​**saveAsObjectFile算子**​​
  • ​​**countByKey算子**​​
  • ​​**foreach算子**​​
  • ​​**24.6 RDD编程进阶**​​
  • ​​**1.累加器**​​
  • ​​**2.广播变量**​​
  • ​​**24.7 RDD的宽窄依赖**​​
  • ​​**25、** **sparkSQL**​​
  • ​​**25.1 什么是sparkSQL**​​
  • ​​**25.2 谓词下推**​​
  • ​​**25.3 创建DataFrame**​​
  • ​​**25.4 scala中RDD、DataFrame、DataSet转换**​​
  • ​​**25.5 java中RDD、DataFrame、DataSet转换**​​
  • ​​**25.6 sparkSQL数据源**​​
  • ​​**1.通用加载/保存方法**​​
  • ​​**2.** **JSON 文件**​​
  • ​​**3.Parquet文件**​​
  • ​​**4.JDBC**​​
  • ​​**5.Hive数据库**​​
  • ​​**26、SparkStream**​​
  • ​​**26.1 SparkStream是什么**​​
  • ​​**26.2架构**​​
  • ​​**26.3 sparkStream 初始化**​​
  • ​​**26.4 Dstream创建**​​
  • ​​**1.文件数据源**​​
  • ​​**2.RDD队列**​​
  • ​​**3.自定义数据源**​​
  • ​​**26.4 Dstream转换**​​
  • ​​**二、面试题**​​
  • ​​1.概述一下spark中常用算子区别(map,mapPartitions, foreach, foreachPartition)​​
  • ​​2.map与flatMap的区别​​
  • ​​3.RDD有哪些缺陷?​​
  • ​​4.spark有哪些组件?​​
  • ​​5.什么是粗粒度,什么是细粒度,各自的优缺点是什么?​​
  • ​​6.driver的功能是什么?​​
  • ​​7.spark中worker的主要工作是什么?​​
  • ​​8.Spark shuffle时,是否会在磁盘上存储​​
  • ​​9.spark中的数据倾斜的现象,原因,后果​​
  • ​​10.spark数据倾斜的处理​​
  • ​​11.spark有哪些聚合类的算子,我们应该避免什么类型的算子?​​
  • ​​12.spark中数据的位置是被谁管理的?​​
  • ​​13.RDD有几种操作类型?​​
  • ​​14.spark作业执行流程​​
  • ​​15.spark 的standalone模式和yarn模式的区别?​​
  • ​​16.spark如何避免数据倾斜?​​

一、基础知识:

Spark学习知识点总结_大数据_02

1、yarn:资源调度框架

2、hdfs(Hadoop Distribute File System),基于“磁盘”的

3、Hadoop MR:map ->shuffle -> reducer

注意:有shuffle就会有磁盘IO,就会有不同节点传输

4、Hive:是一个数据仓库

Spark学习知识点总结_大数据_03

5、spark与MR区别?

1)MR基于磁盘,spark基于内存(指某些步骤基于内存,而不是全部基于内存)

2)spark有DAG(有向无环图),eg:一个蛋糕分10块,用10人去吃,或者1个job划分很多小块儿,每一个用小块儿一组task去处理

Spark学习知识点总结_kafka_04

6、java中SparkConf设置参数介绍

Spark学习知识点总结_spark_05

7、RAM = 内存

8、Spark任务提交**

Spark学习知识点总结_大数据_06

Yarn是hadoop圈里的资源调度框架,它的主节点是resourManager,从节点是nodeManager,standalone是spark自带的资源调度框架,worker就是它的从节点,主节点是master,主节点管理worker从节点。

注意:无论是master还是work都是一个jvm进程

1个application会去创建一个driver的jvm进程 -> 然后driver会向集群中worker发送task并回收results,结果保存在driver的JVM内存中,如果results过大,不建议存回收到driver中,会出现OOM问题(Out Of Memory:内存溢出问题)。

9、spark任务流程及算子

Spark学习知识点总结_kafka_07

总结上图:Transformation算子 RDD -> RDD

Action算子 RDD -> 非RDD

流程:

sparkConf -> sparkContext(是通往集群的唯一通道) -> 加载RDD -> 对RDD使用Transformation算子对数据进行转换 -> Action触发执行Transformation算子 -> 最后关闭

注意:Transformation算子属于“懒加载”,其中“懒加载”算子指的是它不会去执行,必须由Action触发执行。

(Action算子:foreach()、count()、first(0、take(int)),take(x)用于取前x行

一个application包含多个job,其中job数量决定于Action算子多少。

11、算子

Spark学习知识点总结_kafka_08

Spark学习知识点总结_大数据_09

Persist():可以设置持久化级别

Spark学习知识点总结_spark_10

Spark学习知识点总结_数据_11

Spark学习知识点总结_数据_12

注意:cache()、persist()、checkPoint()都是懒加载算子,需要Action算子触发执行

12、standalone

12.1 standalone-clent模式提交任务流程

Spark学习知识点总结_大数据_13

12.2 standalone-cluster 模式提交任务流程

Spark学习知识点总结_spark_14

13、yarn

13.1 yarn-client模式提交任务流程

Spark学习知识点总结_大数据_15

13.2 yarn-cluster模式提交任务流程

Spark学习知识点总结_数据_16

Spark学习知识点总结_数据_17

15、spark pipeline计算模式

Spark学习知识点总结_kafka_18

16、spark资源调度和任务调度

Spark学习知识点总结_数据_19

Spark学习知识点总结_kafka_20

Spark学习知识点总结_大数据_21

17、ETL?= 抽取+转换+加载

ETL = extract + transform + load

用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。

20、kafka

Spark学习知识点总结_数据_22

20.1 kafka概述

20.2 定义

Spark学习知识点总结_大数据_23

20.3 消息队列

Spark学习知识点总结_kafka_24

Spark学习知识点总结_kafka_25

20.4 kafka架构

Spark学习知识点总结_spark_26

20.5 kafka生产者

Spark学习知识点总结_大数据_27

20.6 ack和isr

Ack:决定数据丢不丢,分0/1/-1 3个级别

Isr:存储和消费一致性 hw 和leo

ISR全称是“In-Sync Replicas”,也就是保持同步的副本,他的含义就是,跟Leader始终保持同步的Follower有哪些。

spring.kafka.producer.acks=1

​​javascript:void(0)​​

21、spark历史

Spark学习知识点总结_spark_28

Spark学习知识点总结_spark_29

Spark学习知识点总结_spark_30

Spark学习知识点总结_大数据_31


Spark学习知识点总结_kafka_32

Spark学习知识点总结_大数据_33

Spark学习知识点总结_kafka_34

22、spark内置模块

Spark学习知识点总结_spark_35

23、Spark WordCount

Spark学习知识点总结_数据_36

24、Spark RDD

24.1 介绍流

Spark学习知识点总结_kafka_37

Spark学习知识点总结_kafka_38

Spark学习知识点总结_大数据_39

24.2什么是RDD

Spark学习知识点总结_spark_40

Spark学习知识点总结_大数据_41

注意:RDD中partition的数量由父类的bolck数量决定,而RDD2的partition数量由父类RDD1的partition数量决定

Spark学习知识点总结_数据_42

24.3 RDD属性

Spark学习知识点总结_kafka_43

Spark学习知识点总结_大数据_44

24.4 RDD创建

Spark学习知识点总结_spark_45

Spark学习知识点总结_spark_46

24.5 RDD的转换

第一种: Value类型交互
map算子

Spark学习知识点总结_数据_47

Spark学习知识点总结_大数据_48

Spark学习知识点总结_数据_49

mapPartitions算子

Spark学习知识点总结_数据_50

Spark学习知识点总结_kafka_51

Spark学习知识点总结_数据_52

mapPartitionsWithIndex(分区索引)

Spark学习知识点总结_kafka_53

Spark学习知识点总结_数据_54

Spark学习知识点总结_kafka_55

flatMap

Spark学习知识点总结_spark_56

Spark学习知识点总结_数据_57

glom算子

Spark学习知识点总结_spark_58

Spark学习知识点总结_spark_59

groupBy算子

Spark学习知识点总结_大数据_60

Spark学习知识点总结_kafka_61

filter算子

Spark学习知识点总结_kafka_62

Spark学习知识点总结_kafka_63

sample算子

注意:seed可理解给数随机打分,fraction代表标准,大于标准留下小于标准舍弃。

Spark学习知识点总结_大数据_64

Spark学习知识点总结_大数据_65

distinct算子

Spark学习知识点总结_spark_66

Spark学习知识点总结_kafka_67

Spark学习知识点总结_spark_68

Spark学习知识点总结_大数据_69

coalesce算子

Spark学习知识点总结_数据_70

Spark学习知识点总结_kafka_71

区别partition & task

Spark学习知识点总结_数据_72

repartition算子

Spark学习知识点总结_kafka_73

coalesce 和repartition区别

Spark学习知识点总结_kafka_74

第二种:双Value类型交互
union算子

Spark学习知识点总结_数据_75

subtract算子

Spark学习知识点总结_数据_76

intersection算子

Spark学习知识点总结_数据_77

zip算子

Spark学习知识点总结_大数据_78

partitionBy算子

Spark学习知识点总结_kafka_79

Spark学习知识点总结_大数据_80

groupByKey算子

Spark学习知识点总结_spark_81

reduceByKey算子

Spark学习知识点总结_数据_82

区别reduceByKey和groupByKey

Spark学习知识点总结_数据_83

Spark学习知识点总结_spark_84

Spark学习知识点总结_大数据_85

aggregateByKey算子

Spark学习知识点总结_数据_86

Spark学习知识点总结_数据_87

foldByKey算子

Spark学习知识点总结_spark_88

combinByKey算子

Spark学习知识点总结_kafka_89

sortByKey算子

Spark学习知识点总结_数据_90

mapValues算子

Spark学习知识点总结_数据_91

cogroup算子

Spark学习知识点总结_大数据_92

第三种:action算子
reduce算子

Spark学习知识点总结_kafka_93

collect算子

Spark学习知识点总结_数据_94

count算子

Spark学习知识点总结_kafka_95

first算子

Spark学习知识点总结_数据_96

take算子

Spark学习知识点总结_kafka_97

takeOrdered算子

Spark学习知识点总结_大数据_98

aggregate算子

Spark学习知识点总结_数据_99

fold算子

Spark学习知识点总结_大数据_100

saveAsTextFile算子

Spark学习知识点总结_数据_101

SaveAsSequenceFile算子

Spark学习知识点总结_大数据_102

saveAsObjectFile算子

Spark学习知识点总结_大数据_103

countByKey算子

Spark学习知识点总结_spark_104

foreach算子

Spark学习知识点总结_数据_105

24.6 RDD编程进阶

1.累加器

Spark学习知识点总结_spark_106

Spark学习知识点总结_数据_107

举例求和,思考为什么?

Spark学习知识点总结_数据_108

Spark学习知识点总结_spark_109

答案:因为没有回传,所以sum一直为0

另一种实现方式 -> 创建累加器

Spark学习知识点总结_spark_110

2.广播变量

Spark学习知识点总结_kafka_111

Spark学习知识点总结_大数据_112

24.7 RDD的宽窄依赖

Spark学习知识点总结_大数据_113

25、 sparkSQL

25.1 什么是sparkSQL

Spark学习知识点总结_数据_114

25.2 谓词下推

Spark学习知识点总结_大数据_115

25.3 创建DataFrame

Spark学习知识点总结_大数据_116

Spark学习知识点总结_kafka_117

25.4 scala中RDD、DataFrame、DataSet转换

Spark学习知识点总结_数据_118

Spark学习知识点总结_spark_119

Spark学习知识点总结_数据_120

Spark学习知识点总结_kafka_121

Spark学习知识点总结_spark_122

25.5 java中RDD、DataFrame、DataSet转换

rdd -createDataFrame()-》df -as(personEncoder)-》ds -toDf()-》df -rdd()-rdd

public static void main(String[] args) throws AnalysisException {
SparkSession spark = SparkSession
.builder()
.master("local")
.appName("SparkSQL")
.getOrCreate();
JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext());

User user1 = new User("damao", 20);
User user2 = new User("cat", 18);
List<User> list = Arrays.asList(user1, user2);
//创建RDD
JavaRDD<User> userRDD = sc.parallelize(list);

//1.rdd<User> -> dataset<Row>
/*
createDataFrame 必须RDD泛型为对象而不是row
*/
Dataset<Row> datasetRow = spark.createDataFrame(userRDD, User.class);
datasetRow.show();
//2.Dataset<Row> -》 RDD<Row>
RDD<Row> rdd = datasetRow.rdd();

/*
使用createDataset 必须RDD泛型为对象而不是row
*/
Encoder<User> personEncoder = Encoders.bean(User.class);
Dataset<User> dataset = spark.createDataset(userRDD.rdd(), personEncoder);
dataset.show();
//Dataset<Row> -> Dataset<User>
Dataset<User> datasetUser = datasetRow.as(personEncoder);
//3.Dataset<User> -》 RDD<User>
RDD<User> rddUser = datasetUser.rdd();
//4.Dataset<User> -》 Dataset<Row>
Dataset<Row> datasetRow2 = datasetUser.toDF();

spark.stop();
}

25.6 sparkSQL数据源

1.通用加载/保存方法

Spark学习知识点总结_kafka_123

Spark学习知识点总结_spark_124

Spark学习知识点总结_大数据_125

Spark学习知识点总结_spark_126

2. JSON 文件

Spark学习知识点总结_kafka_127

3.Parquet文件

Spark学习知识点总结_spark_128

4.JDBC

Spark学习知识点总结_数据_129

Spark学习知识点总结_大数据_130

Spark学习知识点总结_kafka_131

5.Hive数据库

Spark学习知识点总结_数据_132

Spark学习知识点总结_kafka_133

26、SparkStream

26.1 SparkStream是什么

Spark学习知识点总结_数据_134

Spark学习知识点总结_spark_135

26.2架构

Spark学习知识点总结_数据_136

Spark学习知识点总结_大数据_137

26.3 sparkStream 初始化

Spark学习知识点总结_数据_138

26.4 Dstream创建

1.文件数据源

Spark学习知识点总结_kafka_139

2.RDD队列

Spark学习知识点总结_大数据_140

3.自定义数据源

Spark学习知识点总结_kafka_141

26.4 Dstream转换

Spark学习知识点总结_大数据_142

Spark学习知识点总结_spark_143

Spark学习知识点总结_spark_144

Spark学习知识点总结_spark_145

Spark学习知识点总结_大数据_146

二、面试题

1.概述一下spark中常用算子区别(map,mapPartitions, foreach, foreachPartition)

Spark学习知识点总结_spark_147

2.map与flatMap的区别

Spark学习知识点总结_数据_148

Spark学习知识点总结_spark_149

3.RDD有哪些缺陷?

Spark学习知识点总结_数据_150

4.spark有哪些组件?

Spark学习知识点总结_大数据_151

5.什么是粗粒度,什么是细粒度,各自的优缺点是什么?

Spark学习知识点总结_数据_152

6.driver的功能是什么?

Spark学习知识点总结_spark_153

7.spark中worker的主要工作是什么?

Spark学习知识点总结_kafka_154

8.Spark shuffle时,是否会在磁盘上存储

答:会

9.spark中的数据倾斜的现象,原因,后果

Spark学习知识点总结_spark_155

10.spark数据倾斜的处理

Spark学习知识点总结_大数据_156

11.spark有哪些聚合类的算子,我们应该避免什么类型的算子?

Spark学习知识点总结_kafka_157

Spark学习知识点总结_数据_158

12.spark中数据的位置是被谁管理的?

Spark学习知识点总结_数据_159

13.RDD有几种操作类型?

Spark学习知识点总结_数据_160

14.spark作业执行流程

Spark学习知识点总结_数据_161

15.spark 的standalone模式和yarn模式的区别?

Spark学习知识点总结_大数据_162

16.spark如何避免数据倾斜?

原因3点:1.null或者无效数据 2.无意义值,大量重复数据 3.有效数据

→ ​​javascript:void(0) ​​

如果是前两种处理数据或者过滤即可,如果是第三种,则详细讨论,

方案一:提高suffle并行度

Spark学习知识点总结_spark_163

方案二:自定义Partitioner

Spark学习知识点总结_spark_164


Spark学习知识点总结_大数据_165

方案三:将Reduce side Join转变为Map side Join

Spark学习知识点总结_数据_166