
Spark学习笔记
文章平均质量分 69
本系列文章内容全部来自尚硅谷教学视频,仅作为个人的学习笔记,感谢老师的精彩讲解
程光CS
Auf dem Wasser zu singen, Op.72, D.774 - Auf dem Wasser zu singen, Op.72, D.774
展开
-
Spark学习笔记(15)——广播变量
我们在Executor端执行的代码中使用的Driver端数据称为闭包数据,这个数据是以task为单位发送到Executor端的,相同的闭包数据每个task中都有一份,当一个Executor中包含多个task,并且闭包数据量较大时,就造成了一个Executor中含有大量重复的数据,并且占用大量的内存。有没有办法解决这个问题呢?一、什么是广播变量Executor其实就一个JVM,所以在启动时,会自动分配内存。完全可以将任务中的闭包数据放置在Executor的内存中,达到共享的目的。广播变量是Spark.原创 2021-08-06 13:18:51 · 1156 阅读 · 1 评论 -
Spark学习笔记(14)——累加器
如果我们在Driver端定义一个变量,然后将该变量发送Executor端进行累加赋值操作,那么Driver端的变量值会发生改变吗?答案是不会,因为Executor端操作的是变量的副本,并不能影响Driver端的变量值。如何在这样的分布式系统中实现变量的共写呢?这就要用到累加器一、累加器实现原理累加器是Spark 计算框架为了能够进行高并发和高吞吐的数据处理封装的三大数据结构之一,功能是实现分布式共享只写变量。累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中.原创 2021-08-06 12:26:16 · 1919 阅读 · 0 评论 -
Spark学习笔记(13)——RDD文件读取与保存
Spark 的数据读取及数据保存可以从两个维度来作区分:文件格式以及文件系统。文件格式分为:text 文件、csv 文件、sequence 文件以及 Object 文件;文件系统分为:本地文件系统、HDFS、HBASE 以及数据库。一、text文件从指定路径读取txt文件val inputRDD: RDD[String] = sc.textFile("input/1.txt")保存数据为text文件到指定路径inputRDD.saveAsTextFile("output")二、seque原创 2021-08-06 10:52:13 · 1270 阅读 · 0 评论 -
Spark学习笔记(12)——RDD分区器
在RDD的创建中我们知道在创建一个RDD时数据是自动划分到各个分区的,然后可以通过shuffle操作按特定的规则再将数据重新划分到各个分区,那么我们能不能在创建RDD时就指定数据划分的规则呢?Spark 目前支持 Hash 分区和 Range 分区,和用户自定义分区。Hash 分区为当前的默认分区。分区器直接决定了 RDD 中分区的个数、RDD 中每条数据经过 Shuffle 后进入哪个分区,进而决定了 Reduce 的个数。➢ 只有 Key-Value 类型的 RDD 才有分区器,非 Key-Va.原创 2021-08-06 10:29:57 · 324 阅读 · 0 评论 -
Spark学习笔记(11)——RDD持久化
一、RDD对象的重用如果对同一个数据源先进行相同的一系列转换算子操作,但是最后要分别执行两个不同的转换算子然后打印出两份不同的数据,那么前面的转换操作代码我们需要重复写两次吗?其实不用,相同的转换代码只需要写一次,然后拿得到的一个RDD对象再去执行不同的算子就可以了。val list = List("Hello Scala", "Hello Spark")val rdd = sc.makeRDD(list)val flatRDD = rdd.flatMap(_.split(" "))val map原创 2021-08-05 18:09:59 · 274 阅读 · 0 评论 -
Spark学习笔记(10)——RDD阶段划分和任务划分
一、阶段划分的概念通过前面的学习我们知道RDD转换算子从分区数据是否会重新组合的角度看可分为两类:一类是如map、mapPartitions等,一个分区的数据经过处理后仍然还在同一个分区。各个分区的数据不存在互相依赖的关系,即OneToOne依赖,因此各个分区在处理完自己的任务后就可以直接通过转换算子进入新的RDD,不需要谁等谁。而另一类转换算子如groupBy、reduceByKey等,分区数据需要重新组合(即存在shuffle操作)。各个分区的数据存在互相依赖的关系,即Shuffle依赖(宽依赖原创 2021-08-05 16:20:32 · 1650 阅读 · 0 评论 -
Spark学习笔记(9)——RDD依赖关系
(1) RDD 血缘关系RDD 只支持粗粒度转换,即在大量记录上执行的单个操作。将创建 RDD 的一系列 Lineage(血统)记录下来,以便恢复丢失的分区。RDD 的 Lineage 会记录 RDD 的元数据信息和转换行为,当该 RDD 的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。例:打印一个RDD的血缘关系wordRDD.toDebugString(1) MapPartitionsRDD[2] at flatMap at Spark01_RDD_Dep.scala原创 2021-08-05 15:09:03 · 206 阅读 · 0 评论 -
Spark学习笔记(8)——RDD序列化
从计算的角度, 算子以外的代码都是在 Driver 端执行, 算子里面的代码都是在 Executor端执行。那么在 scala 的函数式编程中,就会导致算子内经常会用到算子外的数据,这样就形成了闭包的效果,如果使用的算子外的数据无法序列化,就意味着无法传值给 Executor端执行,就会发生错误,所以需要在执行任务计算前,检测闭包内的对象是否可以进行序列化,这个操作我们称之为闭包检测,编译时会自动执行闭包检测。Scala2.12 版本后闭包编译方式发生了改变实现可序列化的两种方式1.继承Serial.原创 2021-08-05 11:23:39 · 194 阅读 · 0 评论 -
Spark学习笔记(7)——RDD行动算子
RDD方法又称RDD算子。算子 : Operator(操作)RDD的方法和Scala集合对象的方法不一样,集合对象的方法都是在同一个节点的内存中完成的。RDD的方法可以将计算逻辑发送到Executor端(分布式节点)执行,为了区分不同的处理效果,所以将RDD的方法称之为算子。RDD的方法外部的操作都是在Driver端执行的,而方法内部的逻辑代码是在Executor端执行。RDD的常用方法分为两大类:转换和行动转换就是将旧的RDD包装成新的RDD,实现功能的补充和封装。比如flatMap和map原创 2021-08-04 09:40:19 · 664 阅读 · 0 评论 -
Spark学习笔记(6)——RDD转换算子
RDD方法又称RDD算子。RDD的常用方法分为两大类:转换和行动转换就是将旧的RDD包装成新的RDD,实现功能的补充和封装。比如flatMap和map方法行动就是触发任务的调度和作业的执行,比如collect方法一、RDD转换算子RDD 根据处理的数据类型不同将算子整体上分为 Value 类型、双 Value 类型和 Key-Value类型1. Value 类型(1) map➢ 函数签名:def map[U: ClassTag](f: T => U): RDD[U] ➢函数说明转载 2021-08-03 20:27:05 · 672 阅读 · 0 评论 -
Spark学习笔记(5)——RDD的创建
本系列文章内容全部来自尚硅谷教学视频,仅作为个人的学习笔记一、RDD的创建在 Spark 中创建 RDD 的创建方式可以分为四种:1.从集合(内存)中创建 RDD //TODO 准备环境 //*号表示本地环境中最大可用核数,采用多线程模拟集群环境 var sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD") val sc = new SparkContext(sparkConf) .原创 2021-07-30 20:42:53 · 1584 阅读 · 0 评论 -
Spark学习笔记(4)—RDD的概念
Spark 计算框架为了能够进行高并发和高吞吐的数据处理,封装了三大数据结构,用于处理不同的应用场景。三大数据结构分别是:➢ RDD : 弹性分布式数据集➢ 累加器:分布式共享只写变量➢ 广播变量:分布式共享只读变量一、RDDJava IO操作,体现了装饰者设计模式RDD的数据处理方式类似于IO流,也有装饰者设计模式RDD的数据只有在调用collect方法时,才会真正执行业务逻辑操作。之前的封装全部都是功能的扩展。RDD是不保存数据的,但是IO可以临时保存一部分数据。1.什么是RDD原创 2021-07-30 10:03:08 · 322 阅读 · 0 评论 -
Spark学习笔记(3)——Spark运行架构
一、运行架构Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构。 如下图所示,它展示了一个 Spark 执行时的基本结构。图形中的 Driver 表示 master,负责管理整个集群中的作业任务调度。图形中的 Executor 则是 slave,负责实际执行任务。二、核心组件由上图可以看出,对于 Spark 框架有两个核心组件:1.Driver (整体驱动进程)Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行原创 2021-07-30 13:51:57 · 259 阅读 · 0 评论 -
Spark学习笔记(2)——Spark运行环境部署
Spark只是一个数据处理框架和计算引擎,它必须要在一个特定的环境中才能运行。常用的运行环境有如下三种一、 Local模式Local模式是指不需要任何其它节点资源就可以在本地执行Spark代码的环境,不需要额外的进程进行资源管理,所有程序都运行在本地的一个进程环境中(如jvm),一般用于教学,调试,演示等。在 IDEA 中运行代码的环境我们称之为开发环境,不太一样。spark-3.0.0-bin-hadoop3.2.tgz表示的是基于3.2版本的Hadoop编译的spark,所以还需要安装配置had原创 2021-07-28 15:59:31 · 3391 阅读 · 2 评论 -
Spark学习笔记(1)——Spark简介
Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。和hadoop一样都是数据处理框架,hadoop出现时间较早,设计初衷是适用于一次性数据计算,而不是循环迭代式数据流的处理,Hadoop与Spark的根本差异是多个作业之间的数据通信问题:Spark多个作业之间数据通信是基于内存,而Hadoop是基于磁盘。因此在处理循环迭代式数据流时Spark的效率更高,带来的问题是要消耗更多的内存资源...原创 2021-07-25 12:04:31 · 225 阅读 · 0 评论