![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Spark
文章平均质量分 74
分布式计算框架
败给你的黑色幽默丶
if i say you're the one would you believe me;
if i ask you to stay would you show me the way
展开
-
【Spark 常见问题】Spark数据倾斜
【Spark数据倾斜】B站视频:https://www.bilibili.com/video/BV1834y1d772现象一个Spark任务中,大多数task任务运行速度很快,就有那么即可task任务运行缓慢,慢慢的可能接着报出内存溢出的问题了,这个时候就可以认定为数据倾斜了;原理spark中数据倾斜不是说原始数据存在倾斜,原始数据都是一个一个的block,大小都是一样的,不存在数据倾斜;数据倾斜指的是在shuffle过程,由于不同的key对应的数据量不同,导致task处理的数据量不同.原创 2021-12-03 02:10:10 · 963 阅读 · 0 评论 -
【Spark】【内存管理】
1.堆内和堆外内存规划Executor 作为一个 JVM 进程,Executor 的内存管理建立在 JVM 的内存管理之上,Spark 对 JVM的堆内(On-heap)空间进行了更为详细的分配,以充分利用内存。同时,Spark 引入了堆外(Off-heap)内存,使之可以直接在工作节点的系统内存中开辟空间,进一步优化了内存的使用。堆内内存受到 JVM 统一管理,堆外内存是直接向操作系统进行内存的申请和释放。1) 堆内内存划分堆 内 内 存 的 大 小 , 由 Spark 应 用 程 序原创 2022-01-09 04:42:41 · 240 阅读 · 0 评论 -
【Spark】【Shuffle】
Shuffle 的核心要点1.ShuffleMapStage 与 ResultStage在划分 stage 时,最后一个 stage 称为 finalStage,它本质上是一个ResultStage对象,前面的所有 stage 被称为ShuffleMapStage。ShuffleMapStage 的结束伴随着 shuffle 文件的写磁盘,而ResultStage的开始伴随着从磁盘中读取shuffle文件ResultStage 基本上对应代码中的 action 算子,即将一个函数应用在原创 2022-01-08 23:10:59 · 975 阅读 · 0 评论 -
【Spark】【内核】Spark 任务调度机制
Spark 任务调度机制1. Job & Stage & Task2. Spark 任务调度概述Spark Stage 级调度Spark Task 级调度调度策略本地化调度失败重试与黑名单机制4.1Task数量和分区的关系4.2 阶段的划分4.3 阶段划分源码4.4 RDD 任务划分4.5 Task的数量4.6 Task种类的划分4.7 任务调度4.8 任务执行总结)1. Job & Stage & Task一个 Spark 应用程序包括 Job、Stage 以及 T原创 2022-01-08 16:10:25 · 203 阅读 · 0 评论 -
【Spark内核】01 环境准备(yarn)
asd原创 2021-12-06 00:31:06 · 975 阅读 · 0 评论 -
【Spark StructedStreaming】Output mode
1.Append 模式(默认)默认输出模式, 仅仅添加到结果表的新行才会输出.采用这种输出模式, 可以保证每行数据仅输出一次.在查询过程中, 如果没有使用 watermark 机制, 则不能使用聚合操作. 如果使用了 watermask 机制, 则只能使用基于 event-time 的聚合操作.有了waterMark,基于event-time 的聚合操作就相当于查询多个时间窗口的聚合指标了;由于窗口不一样因此可以appendwatermask 用于高速 append 模式如何输出不会再发生变动的原创 2021-10-14 01:00:22 · 315 阅读 · 0 评论 -
【Structed Streaming】操作 Streaming DataFrame/DataSet
The windows are calculated as below:// 1.窗口个数maxNumOverlapping = ceil(windowDuration / slideDuration)for (i <- 0 until maxNumOverlapping) windowId <- ceil((timestamp - startTime) / slideDuration) windowStart <- windowId * slideDuration +原创 2021-11-02 16:03:55 · 738 阅读 · 0 评论 -
【Spark SQL】内置函数
http://spark.apache.org/docs/latest/api/sql/原创 2021-11-01 15:51:52 · 155 阅读 · 0 评论 -
【Spark SQL】数据的加载和保存
1. 通用的加载和保存方式SparkSQL提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的API,根据不同的参数读取和保存不同格式的数据1.1 查看SparkSql能读取的文件格式scala> spark.read.csv format jdbc json load option options orc parquet schema table text textFileSparkSQL默认读取和保存的文件格式为pa原创 2021-10-12 03:23:36 · 493 阅读 · 0 评论 -
【Spark SQL】自定义函数
用户可以通过spark.udf功能添加自定义函数,实现自定义功能1.UDF步骤:创建DataFramescala> val df = spark.read.json("data/user.json")df: org.apache.spark.sql.DataFrame = [age: bigint, username: string]注册UDFscala> spark.udf.register("addName",(x:String)=> "Name:"+x)re原创 2021-10-12 00:14:54 · 590 阅读 · 0 评论 -
【Spark SQL】核心编程
1.新的起点SparkSessionSpark Core中,如果想要执行应用程序,需要首先构建上下文环境对象SparkContext,Spark SQL其实可以理解为对Spark Core的一种封装,不仅仅在模型上进行了封装,上下文环境对象也进行了封装。在老的版本中,SparkSQL提供两种SQL查询起始点:(1)一个叫SQLContext,用于Spark自己提供的SQL查询;(2)一个叫HiveContext,用于连接Hive的查询。SparkSession是Spark最新的SQL查询起始点,原创 2021-10-11 23:19:41 · 148 阅读 · 0 评论 -
【Spark Core】【RDD】【11】广播变量
概念分布式共享只读变量(1) 变量(2) 分布式中执行的(3) 共享:一个Executor中的多个Task共享实现原理(1) 如上图所示,当一个算子用到了Driver端的数据(图中的map),那么就会对此数据进行闭包,发送到Executor端进行运算(2) 每个Task中都需要用到map(闭包数据),如果有十个分区意味着十个Task。场景如下:如果只有一个Executor,且只有一个core,此时就是并发执行了。一个Executor放了十份数据,造成大量冗余占用内存。(3)广播变量所解决原创 2021-10-11 01:19:42 · 160 阅读 · 0 评论 -
【Spark Core】【RDD】【10】累加器
累加器定义累加器是分布式的共享只写变量共享:累加器的值由Driver端共享给Executor端只写:Executor端互相之间读取不到对方的累加器累加器可以替换一些需要shuffle的操作问题引入package SparkCore._06_累加器import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}/** * yatolovefantasy * 2021-10-1原创 2021-10-11 00:36:20 · 179 阅读 · 0 评论 -
【Spark Core】 【RDD】【09】文件读取与保存
Spark的数据读取及数据保存可以从两个维度来作区分:文件格式文件格式分为:text文件、csv文件、sequence文件以及Object文件;文件系统。文件系统分为:本地文件系统、HDFS、HBASE以及数据库。1.从text文件读取数据,和写到text文件中// 读取输入文件val inputRDD: RDD[String] = sc.textFile("input/1.txt")// 保存数据inputRDD.saveAsTextFile("output")一个分区对应一个原创 2021-10-10 22:07:45 · 202 阅读 · 0 评论 -
【Spark Core】【RDD】【08】分区器
分区两要素分区有两个要素:1.分区个数 2.分区规则在RDD中,我们一般只指定了分区个数,并没有写分区规则,分区规则就由分区器决定。Spark自带分区器(1) Spark目前支持Hash分区和Range分区,和用户自定义分区。Hash分区为当前的默认分区。(2) Range分区器要求必须能够排序,range能解决数据倾斜分区器特点分区器直接决定了RDD中分区的个数、RDD中每条数据经过Shuffle后进入哪个分区,进而决定了Reduce的个数,也就是输出文件的个数。只有Key-Value原创 2021-10-10 22:01:57 · 195 阅读 · 0 评论 -
【Spark Core】【RDD】【07】持久化&checkpoint
5.RDD持久化如果一个RDD重复使用,那么会从头再次执行来获取数据RDD对象重用,但是数据不重用持久化演示package SparkCore._05_持久化import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}/** * yatolovefantasy * 2021-10-10-20:10 */object Cache { def main(args: Array原创 2021-10-10 21:27:25 · 175 阅读 · 0 评论 -
【Spark Core】【RDD】【06】 依赖关系
1.RDD 血缘关系依赖关系:两个相邻RDD之间的关系血缘关系:多个连续的RDD的依赖关系2.RDD血缘关系的演示下图演示了RDD的血缘关系:RDD是不会保存数据的,但是每个RDD会保存自己的血缘关系;血缘关系的意义:因为RDD不保存数据,一旦计算失败了,不能从上一个RDD重新计算,必须重头计算,那么RDD必须要知道数据源在哪里,血缘关系就用于追溯数据源,提高了容错性血缘关系演示package SparkCore._04_血缘关系import org.apache.spark.r原创 2021-10-10 21:27:06 · 291 阅读 · 0 评论 -
【Spark Core】【RDD】【05】序列化
1.闭包检测(1)RDD算子以外的代码都是在Driver端执行, 算子里面的代码都是在Executor端执行。(2)当算子内用到算子外的数据,这样就形成了闭包的效果,如果使用的算子外的数据无法序列化,就意味着无法传值给Executor端执行,就会发生错误,所以需要在执行任务计算前,必须检测闭包内的对象是否可以进行序列化,这个操作我们称之为闭包检测。Scala2.12版本后闭包编译方式发生了改变package RDD._07_RDD序列化import org.apache.spark.{Spark原创 2021-10-10 15:56:21 · 162 阅读 · 0 评论 -
【Spark Core】【RDD】【04】行动算子
行动算子0.行动算子概述1.reduce2.collect3. count4.first5.take6.takeOrdered7.aggregate8.fold9. countByKey10.save11 foreach12.算子的本质0.行动算子概述行动算子触发任务执行,sc.runjob(),创建activeJob,提交并执行。行动算子直接出结果,而不是RDD1.reduce1.函数签名def reduce(f: (T, T) => T): T2.函数说明聚集RDD中的所有元原创 2021-10-09 14:30:14 · 156 阅读 · 0 评论 -
【Spark Core】【RDD】【03】转换算子
转换算子1.Value类型算子1.1 map1.2 mapPartitions1.Value类型算子Value类型:每次处理的元素是1个元素,元素类型为单值1.1 map1.函数签名def map[U: ClassTag](f: T => U): RDD[U]2.函数说明将处理的数据逐条进行映射转换;这里的转换可以是类型的转换,也可以是值的转换由于只是做转换,因此处理的数据集中数据不会增加也不会减少3.使用演示val dataRDD: RDD[Int] = sparkCont原创 2021-10-10 13:48:41 · 169 阅读 · 0 评论 -
【Spark Core】【RDD】【02】RDD的创建
1.从内存集合中创建RDD从集合中创建RDD,Spark主要提供了两个方法:parallelize和makeRDDval sparkConf = new SparkConf().setMaster("local[*]").setAppName("spark")val sparkContext = new SparkContext(sparkConf)val rdd1 = sparkContext.parallelize( List(1,2,3,4))val rdd2 = .原创 2021-11-21 15:52:15 · 1237 阅读 · 0 评论 -
【Spark Core】【RDD】【01】核心属性 & 执行原理
RDD的特点图中展示的是textFile方法读取文件来创建RDD。RDD要从两个方面考量:1.实现的功能 2.如何进行分区每一个RDD的计算功能是不同的,所以RDD称之为最小的计算单元RDD的计算是分布式的,RDD封装了计算逻辑,那么接下来如何将数据分配给不同的Executor做分布式计算,这就是分区的目的RDD代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合RDD在底层原码中就是一个抽象类弹性1.存储的弹性:内存与磁盘的自动切换;Spark的计算是基于.原创 2021-11-19 00:16:54 · 1191 阅读 · 0 评论 -
【Spark】【第四章】 Spark内核概述
Spark运行架构Spark框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构图形中的Driver表示master,负责管理整个集群中的作业任务调度。图形中的Executor 则是 slave,负责实际执行任务。核心组件由上图可以看出,对于Spark框架有两个核心组件:1. DriverDriver就是驱动器节点,用于执行Spark任务中的main方法,触发整个任务执行。Driver在Spark作业执行时主要负责:a) 将用户程序转化为作.原创 2021-11-18 20:07:20 · 1478 阅读 · 0 评论 -
【Spark】【第三章】 Spark运行环境
本地模式所谓的Local模式,就是不需要其他任何节点资源就可以在本地执行Spark代码的环境,一般用于教学,调试,演示等,之前在IDEA中运行代码的环境我们称之为开发环境,不太一样。1.解压缩文件将spark-3.0.0-bin-hadoop3.2.tgz文件上传到Linux并解压缩,放置在指定位置,路径中不要包含中文或空格,课件后续如果涉及到解压缩操作,不再强调tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/modulecd /opt/mod原创 2021-11-18 01:04:04 · 1612 阅读 · 0 评论 -
【Spark】【第二章】 IDEA开发环境准备 & WordCount
(1)增加Scala插件Spark由Scala语言开发的,所以本课件接下来的开发所使用的语言也为Scala,咱们当前使用的Spark版本为3.0.0,默认采用的Scala编译版本为2.12,所以后续开发时。我们依然采用这个版本。开发前请保证IDEA开发工具中含有Scala开发插件(2) 增加依赖关系修改Maven项目中的POM文件,增加Spark框架的依赖关系。本课件基于Spark3.0版本,使用时请注意对应版本。<dependencies> <dependency>原创 2021-10-08 21:23:00 · 198 阅读 · 0 评论