Spark学习知识点总结

在这里插入图片描述

文章目录

一、基础知识:

在这里插入图片描述

1、yarn:资源调度框架

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

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

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

4、Hive:是一个数据仓库

在这里插入图片描述

5、spark与MR区别?

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

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

在这里插入图片描述

6、java中SparkConf设置参数介绍

在这里插入图片描述

7、RAM = 内存

8、Spark任务提交**

在这里插入图片描述

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任务流程及算子

在这里插入图片描述

总结上图: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、算子

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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?= 抽取+转换+加载

ETL = extract + transform + load

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

20、kafka

在这里插入图片描述

20.1 kafka概述

20.2 定义

在这里插入图片描述

20.3 消息队列

在这里插入图片描述

在这里插入图片描述

20.4 kafka架构

在这里插入图片描述

20.5 kafka生产者

在这里插入图片描述

20.6 ack和isr

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

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

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

spring.kafka.producer.acks=1

https://blog.csdn.net/zhongqi2513/article/details/90476219

21、spark历史

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

22、spark内置模块

在这里插入图片描述

23、Spark WordCount

在这里插入图片描述

24、Spark RDD

24.1 介绍流

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

24.2什么是RDD

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

24.3 RDD属性

在这里插入图片描述

在这里插入图片描述

24.4 RDD创建

在这里插入图片描述

在这里插入图片描述

24.5 RDD的转换

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

mapPartitions算子

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

mapPartitionsWithIndex(分区索引)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

flatMap

在这里插入图片描述

在这里插入图片描述

glom算子

在这里插入图片描述

在这里插入图片描述

groupBy算子

在这里插入图片描述

在这里插入图片描述

filter算子

在这里插入图片描述

在这里插入图片描述

sample算子

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

在这里插入图片描述

在这里插入图片描述

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.累加器

在这里插入图片描述

在这里插入图片描述

举例求和,思考为什么?

在这里插入图片描述

在这里插入图片描述

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

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

在这里插入图片描述

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转换

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.通用加载/保存方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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如何避免数据倾斜?

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

https://www.cnblogs.com/weijiqian/p/14013292.html

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

方案一:提高suffle并行度

在这里插入图片描述

方案二:自定义Partitioner

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
大数据基础知识入门 社会保障事业部 张火磊 主要内容 大数据价值 03 大数据概念、特性、由来 01 大数据应用举例 04 02 Hadoop技术介绍 大数据概念、特性、由来 什么叫大数据? 麦肯锡全球研究所给出的定义是:一 种规模大到在获取、存储、管理、分 析方面大大超出了传统数据库软件工 具能力范围的数据集合,具有海量的 数据规模、快速的数据流转、多样的 数据类型和价值密度低四大特征。 大数据的特性 大量(Volume) 多样(Variety) 快速(Velocity) 价值(Value) 大数据技术的由来 自 2002 年 数 字 时 代 开 启 以 来,数据呈现海量增长趋势(如图 所示)。特别是在2004年社交媒体 产生后,数据更是呈现爆炸性增 长趋势. 随着数据的增长,尤其数据 达到PB级以后,数据的存储和分 析都会变得非常困难。 2003-2006年,Google提出了三大关键技术来解决大规模数据的存 储和处理: GFS、MapReduce、BigTable并称Google大数据的三驾马 车。虽然Google没有公布这三个产品的源码,但是他发布了这三个 产品的详细设计论文,奠定了风靡全球的大数据的基础! Hadoop之父Doug Cutting 受此启发的Doug Cutting等人用2 年的业余时间实现了GFS和MapReduce机制。 2005年,Hadoop作为Lucene的子项目Nutch 的一部分正式引入Apache基金会。2006年2 月被分离出来,成为一套完整独立的软件, 起名为Hadoop。 Hadoop的起源 总结起来,Hadoop起源于Google的三大论文 GFS—->HDFS Google MapReduce—->Hadoop MapReduce BigTable—->HBase Hadoop技术介绍 Hadoop的架构 Cloudera Manger Ambari 和 Cloudera Manger都是基于Web的工具,支持 Apache Hadoop集群的供应、管理 和 监 控 。 支 持 大 多 数 Hadoop 组 件 , 包 括 HDFS 、 MapReduce 、 Spark 、 Hive 、 Pig 、 Hbase 、 Zookeper、Sqoop等 大数据集群管理方式 分 为 手 工 方 式 ( Apache hadoop)和工具方式(Ambari + hdp 和 Cloudera Manger + CDH) HDFS HDFS ( Hadoop Distributed File System ) 是 Hadoop项目的核心组件之一,是分布式计算中数据存储 管理的基础,是基于流数据模式访问和处理超大文件的 需求而开发的,可以运行于廉价的商用服务器上。它所 具有的高容错、高可靠性、高可扩展性、高吞吐率等特 征为海量数据提供了不怕故障的存储,为超大数据集的 应用处理带来了很多便利。主要包含NameNode(用来管理 文件系统的命名空间)和DataNode(文件系统中真正存储 数据的地方) MapReduce MapReduce是一个高性能的批处理分布式 计算框架,用于对海量数据进行并行分析和处 理。MapReduce采用"分而治之"的思想,把对大 规模数据集的操作,分发给一个主节点管理下 的各个分节点共同完成,然后通过整合各个节 点的中间结果,得到最终结果。简单地说, MapReduce就是"任务的分解与结果的汇总"。 举例:如果想统计下过去10年计算机论文出现 最多的几个单词 传统方法:首先写一个遍历论文的程序,部署 到N台机器上去,然后把论文集分成N份,一台 机器跑一个作业。这个方法从理论上可以实 现,但是部署起来很麻烦,我们要人工把程序 copy到别的机器,要人工把论文集分开,最后 还要把N个运行结果进行整合。 Spark Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。 Spark在借鉴Hadoop MapReduce优点的同时,很好地解决了MapReduce所面临的问题。 Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数 据集操作类型,编程模型比Hadoop MapReduce更灵活。 Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭代执行机制,因此 Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。 Spark 优点: 运行速度快:使用DAG执行引擎以支持循环数据流与内存计算 容易使用:支持使用Scala、Java、Python和R语言进行编程,可以通过Spark Shell 进行交互式编程 通用性:Spark提供了完整而强大的技术
Spark Core是Spark的基础组件,提供了分布式任务调度、内存管理、错误恢复、存储管理等核心功能。以下是Spark Core的一些知识点概述: 1. RDD:弹性分布式数据集,是Spark中最基本的数据处理模型,可以看作是一个不可变的分布式数据集合,支持并行操作。 2. 累加器:用于在并行计算中对某个变量进行累加操作,可以在Driver端定义,但在Executor端进行累加操作。 3. 广播变量:用于在并行计算中对某个只读变量进行广播,以便在每个节点上使用相同的值,避免重复传输。 4. 分区:RDD中数据的分片,每个分区都会被一个Task处理,分区数可以手动指定。 5. 依赖关系:RDD之间的依赖关系分为窄依赖和宽依赖,窄依赖表示每个父RDD的分区最多只被一个子RDD的分区使用,宽依赖表示每个父RDD的分区可能被多个子RDD的分区使用。 6. SparkContext:Spark应用程序的入口,用于创建RDD、累加器、广播变量等。 7. 部署模式:Spark支持本地模式、Standalone模式、Yarn模式、Mesos模式等多种部署模式。 8. 数据读取:Spark支持从本地文件系统、HDFS、HBase、JDBC等多种数据源读取数据。 以下是一个例子,演示如何使用Spark Core读取本地文件并进行Word Count操作: ```python from pyspark import SparkContext # 创建SparkContext sc = SparkContext("local", "Word Count") # 读取文件并进行Word Count lines = sc.textFile("file:///path/to/file") words = lines.flatMap(lambda line: line.split(" ")) wordCounts = words.map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b) # 输出结果 for wc in wordCounts.collect(): print(wc) # 关闭SparkContext sc.stop() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘大猫.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值