Spark编程模型(核心篇 一)

目录

  • RDD概述
  • RDD实现
  • RDD运行流程
  • RDD分区
  • RDD操作分类
  • RDD编程接口说明

一、RDD概述


  • RDD:是Resilient distributed datasets的简称,中文为弹性分布式数据集;是Spark最核心的模块和类

  • DAG:
  • Spark将计算转换为一个有向无环图(DAG)的任务集合,通过为RDD提供一种基于粗粒度变换(如map, filter, join等)的接口
  • RDD类型:mappedRDD, SchemaRDD
  • RDD操作分类:转换操作(又分为创建操作、转换操作)、行为操作(又分控制操作-进行RDD持久化、行为操作)

二、RDD实现



1、作业调度

A、当对RDD执行转换操作时,调度器会根据RDD的“血统”来构建由若干高度阶段(Stage)组成的有向无环图(DAG), 每个阶段包含尽可能多的连续“窄依赖”转换

B、另外,调度分配任务采用“延时调度”机制,并根据”数据本地性“来确定

宽依赖与窄依赖:

  • 窄依赖是指父RDD的每个分区只被子RDD的一个分区所使用,子RDD一般对应父RDD的一个或者多个分区。(与数据规模无关)不会产生shuffle
  • 宽依赖指父RDD的多个分区可能被子RDD的一个分区所使用,子RDD分区通常对应所有的父RDD分区(与数据规模有关),会产生shuffle
  • 更细化文档可参见 https://blog.csdn.net/weixin_39043567/article/details/89520896

                                                     

2、解析器集成:三个步骤 A、用户每一行输入编译成一个类 B、类加载至JVM中  C、调用 类函数

3、内存管理:

  • 提供了3种持久化RDD的存储策略: A、未序列化Java对象存在内存中  B、序列化数据存在内存中  C、序列化数据存储在磁盘中
  • 对内存使用LRU回收算法进行管理 (以RDD为单位)

4、检查点(Checkpoint)支持

  • 为RDD提供设置Checkpoint的API,以将一些Checkpoint保存在外部存储中

5、多用户管理:提供公平调度算法、延迟调度、作业取消机制、细粒度资源共享、数据本地性

三、RDD运行流程



RDD在Spark中运行大概分为以下三步:

  1. 创建RDD对象

  2. DAGScheduler模块介入运算,计算RDD之间的依赖关系,RDD之间的依赖关系就形成了DAG
  3. 每一个Job被分为多个Stage。划分Stage的一个主要依据是当前计算因子的输入是否是确定的,如果是则将其分在同一个Stage,避免多个Stage之间的消息传递开销

示例图如下:

  • 以下面一个按 A-Z 首字母分类,查找相同首字母下不同姓名总个数的例子来看一下 RDD 是如何运行起来的

  • 创建 RDD  上面的例子除去最后一个 collect 是个动作,不会创建 RDD 之外,前面四个转换都会创建出新的 RDD 。因此第一步就是创建好所有 RDD( 内部的五项信息 )?

  • 创建执行计划 Spark 会尽可能地管道化,并基于是否要重新组织数据来划分 阶段 (stage) ,例如本例中的 groupBy() 转换就会将整个执行计划划分成两阶段执行。最终会产生一个 DAG(directed acyclic graph ,有向无环图 ) 作为逻辑执行计划

  • 调度任务  将各阶段划分成不同的 任务 (task) ,每个任务都是数据和计算的合体。在进行下一阶段前,当前阶段的所有任务都要执行完成。因为下一阶段的第一个转换一定是重新组织数据的,所以必须等当前阶段所有结果数据都计算出来了才能继续

三、RDD分区



1、RDD分区计算

2、RDD分区函数,以及默认提供两种划分器:哈希分区划分器和范围分区划分器

四、RDD操作函数



Spark转换操作函数讲解: https://www.cnblogs.com/jinggangshan/p/8086492.html

https://blog.csdn.net/taokeblog/article/details/103796987

行动操作函数讲解:

五、RDD编程接口说明



Spark提供了通用接口来抽象每个RDD,包括

1、分区信息:数据集的最小分片

2、依赖关系

3、函数

4、划分策略和数据位置的元数据

原文地址:https://www.cnblogs.com/zhanghy/p/12166150.html

时间: 2024-10-09 19:30:39

Spark编程模型(核心篇 一)的相关文章

Spark机器学习:Spark 编程模型及快速入门

http://blog.csdn.net/pipisorry/article/details/52366356 Spark编程模型 SparkContext类和SparkConf类 我们可通过如下方式调用 SparkContext 的简单构造函数,以默认的参数值来创建相应的对象.val sc = new SparkContext("local[4]", "Test Spark App") 这段代码会创建一个4线程的 SparkContext 对象,并将其相应的任务命

Spark入门实战系列--3.Spark编程模型(上)--概念及SparkShell实战

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送–Spark入门实战系列>获取 1 Spark编程模型 1.1 术语定义 应用程序(Application): 基于Spark的用户程序,包含了一个Driver Program 和集群中多个的Executor: 驱动程序(Driver Program):运行Application的main()函数并且创建SparkContext,通常用SparkContext代表Driver Program: 执行单元(Executor): 是为某

Spark入门实战系列--3.Spark编程模型(下)--IDEA搭建及实战

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送–Spark入门实战系列>获取 1 安装IntelliJ IDEA IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合.代码审查. 创新的GUI设计等方面的功能可以说是超常的.IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨

Spark 编程模型(上)

初识RDD 什么是RDD? 定义:Resilient distributed datasets (RDD), an efficient, general-purpose and fault-tolerant abstraction for sharing data in cluster applications. RDD 是只读的. RDD 是分区记录的集合. RDD 是容错的.--- lineage RDD 是高效的. RDD 不需要物化.---物化:进行实际的变换并最终写入稳定的存储器上 R

Spark 编程模型(中)

先在IDEA新建一个maven项目 我这里用的是jdk1.8,选择相应的骨架 这里选择本地在window下安装的maven 新的项目创建成功 我的开始pom.xml文件配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.ap

Spark编程模型及RDD操作

转载自:http://blog.csdn.net/liuwenbo0920/article/details/45243775 1. Spark中的基本概念 在Spark中,有下面的基本概念.Application:基于Spark的用户程序,包含了一个driver program和集群中多个executorDriver Program:运行Application的main()函数并创建SparkContext.通常SparkContext代表driver programExecutor:为某App

Spark 编程模型(下)

创建Pair RDD 什么是Pair RDD 创建Pair RDD Pair RDD的转化操作 Pair RDD的转化操作1 在xshell启动

Spark Core 的核心理论

1. Spark Core的核心功能  (1)SparkContext:    通常而言,DriverApplication 的执行与输出都是通过SparkContext完成的,在正式提交Application 之前,首先需要初始化SparkContext.SparkContext隐藏了网络通信.分布式部署.消息通信.存储能力.计算能力.缓存.测量系统.文件服务.web服务等内容.应用程序的开发者只需要使用SparkContext 提供的API完成功能开发.  一个application ---

【收藏转】WCF后传系列(9):深度通道编程模型Part 2—实例篇

引言 从本质上说,WCF是一个通信服务框架,它允许我们使用不同的传输协议,使用不同的消息编码形式,跟不同的WS-*系列规范交互,而所有这些细节都是由通道堆栈来处理的.在<WCF专题系列(8):深度通道编程模型Part 1—设计篇>中,对于WCF中的通道模型有了深入的认识,本文中,我将通过实例来说明在通道模型中,服务端是如何接收消息,客户端是如何发送消息的. 服务端通道 本文将不使用WCF的编程模型,而直接利用通道模型来进行通信,这样有助于我们更进一步加深对服务端处理消息的认识,在服务端侦听并接