Spark初识-弹性分布式数据集RDD

Spark 的核心是建立在统一的抽象弹性分布式数据集(Resiliennt Distributed Datasets,RDD)之上的,这使得 Spark 的各个组件可以无缝地进行集成,能够在同一个应用程序中完成大数据处理。

一、RDD概念

RDD 是 Spark 提供的最重要的抽象概念,它是一种有容错机制的特殊数据集合,可以分布在集群的结点上,以函数式操作集合的方式进行各种并行操作。

通俗点来讲,可以将 RDD 理解为一个分布式对象集合,本质上是一个只读的分区记录集合。每个 RDD 可以分成多个分区,每个分区就是一个数据集片段。一个 RDD 的不同分区可以保存到集群中的不同结点上,从而可以在集群中的不同结点上进行并行计算。

设计背景,迭代式算法,若采用MapReduce则会重用中间结果;MapReduce不断在磁盘中读写数据,会带来很大开销。

二、RDD的典型执行过程

img

1)读入外部数据源进行创建,分区

2)RDD经过一系列的转化操作,每一次都会产生不同的RDD供给下一个转化擦操作使用

3)最后一个RDD经过一个动作操作进行计算并输出到外部数据源

优点:惰性调用、调用、管道化、避免同步等待,不需要保存中间结果

三、高效的原因

1)容错性:现有方式是用日志记录的方式。而RDD具有天生的容错,任何一个RDD出错,都可以去找父亲节点,代价低。RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。

2)中间结果保存到内存,避免了不必要的内存开销

3)存放的数据可以是java对象,避免了对象的序列化和反序列化。

四、RDD的依赖关系:窄依赖和宽依赖

窄依赖:(narrow dependency)是指每个父RDD的一个Partition最多被子RDD的一个Partition所使用,例如map、filter、union等操作都会产生窄依赖;(独生子女)即rdd中的每个partition仅仅对应父rdd中的一个partition。父rdd里面的partition只去向子rdd****里的某一个partition!这叫窄依赖,如果父rdd里面的某个partition会去子rdd里面的多个partition,那它就一定是宽依赖!**

宽依赖(shuffle dependency):是指一个父RDD的Partition会被多个子RDD的Partition所使用,例如groupByKey、reduceByKey、sortByKey等操作都会产生宽依赖;(超生)每一个父rdd的partition数据都有可能传输一部分数据到子rdd的每一个partition中,即子rdd的多个partition依赖于父rdd。宽依赖划分成一个stage!!!

作用:完成Stage的划分

img

Stage的划分:

spark划分stage的整体思路是:从后往前推,遇到宽依赖就断开,划分为一个stage;遇到窄依赖就将这个RDD加入该stage中。因此在上图中RDD C,RDD D,RDD E,RDDF被构建在一个stage中,RDD A被构建在一个单独的Stage中,而RDD B和RDD G又被构建在同一个stage中。

ShuffleMapStage和ResultStage:

简单来说,DAG的最后一个阶段会为每个结果的partition生成一个ResultTask,即每个Stage里面的Task的数量是由该Stage中最后一个RDD的Partition的数量所决定的!而其余所有阶段都会生成ShuffleMapTask;之所以称之为ShuffleMapTask是因为它需要将自己的计算结果通过shuffle到下一个stage中;也就是说上图中的stage1和stage2相当于mapreduce中的Mapper,而ResultTask所代表的stage3就相当于mapreduce中的reducer。

*、本文参考

Spark RDD是什么?

spark原理:概念与架构、工作机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark入门- Spark运行Local本地模式

一、Spark单机模式部署 Spark版本 : spark-2.4.7-bin-hadoop2.7 1、安装配置JDK环境 2、下载Spark 官网下载http://spark.apache.org/ 然后上传到LInux服务器上 3、解压 tar -zxvf spark-2.4.7-bin-hadoop2.7.tgz解压目录说明 bin 可执行脚本 conf …

Spark入门-了解Spark核心概念

在本文中我们将从Spark集群角度和程序应用的角度来对相关概念进行了解 一. 站在集群角度 1.1 Master Spark 特有资源调度系统的 Leader。掌管着整个集群的资源信息,类似于 Yarn 框架中的 ResourceManager,主要功能: 监听 Worker&#xff0…

Spark运行standalone集群模式

spark的集群主要有三种运行模式standalone、yarn、mesos,其中常被使用的是standalone和yarn,本文了解一下什么是standalone运行模式,并尝试搭建一个standalone集群 一、standalone模式 standalone模式,是spark自己实现的&#xf…

docker原理

a.更快速的支付和部署:开发者可以使用一个标准的镜像来构建一套开发容器 ,开发完成之后,运维人员可以直接使用这个容器来部署代码。 b.更高效的虚拟化: Docker容器的运行不需要额外的hypervisor支持,它是内核级的虚拟化,因此 可以实现更高的性能和效。 I 0c更轻松的迁移和扩展…

创造型模式——工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的…

创造型模式——抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的…

创造型模式——单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建…

创造性模式——原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建…

Java集合:关于 LinkedList 的内容盘点

本篇内容包括:LinkedList 的概述、LinkedList 的结构既双向链表实现与LinkedList-Node 结构、LinkedList 的使用(构造方法&常用方法)、关于 Queue 队列的介绍、关于 ArrayList 和 LinkedList 的区别以及算法:翻转链表&#xf…

oracle迁移父子数据

现有需求如下,业务组织单元表中id字段数据在另外一个系统全部重复,但需要将此业务单元组织导入另一系统 业务组织单元表Isc_Specialorg_Unit 表中存在ID字段为子节点数据,parent_id为父节点数据,orgpath为组织路径 现在做如下操…

oracle表空间

概念 表空间和数据文件 ●表空间是逻辑存储概念,一个表空间是一个或多个数据文件的逻辑集合 ●存储对象(表、索引)逻辑的存储在表空间上,而存储对象的数据物理的存放在数据文件上 ●数据库至少需要一个叫做system的表空间,也就是系统表空间 ●…

oracle日志

日志分类 redo log files联机日志或重做日志 archived log files归档日志 1184198alert log files 告警日志 trace files user_ _dump_ _dest 用户信息日志如跟踪会话日志 background dump_ dest进程日志还有其他一-些不常用的日志 v$database的log_mode 数据库归档模式…

MySQL:分库分表知识点盘点

本篇内容包括:数据库瓶颈、分库分表以及分库分表相关问题 一、数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用…

oracle的sga

sga SGA的管理 ■有三种方式: ●8i:SGA的总大小由所有内存组件大小之和决定,不能直接定义SCA大小。对内部组件大小的修改必须在数据库重起 后 才能生为,所以叫做SGA的静态管理。 ●9i&#xff…

MySQL:主从相关知识点盘点

本篇内容包括:MySQL 主从复制简介、主从复制的原理以及主从搭建 一、MySQL 主从复制简介 在实际的生产中,为了解决Mysql的单点故障已经提高MySQL的整体服务性能,一般都会采用**「主从复制」**。 比如:在复杂的业务系统中&#x…

oracle导出expdp

expdp/impdp 是 oracle 10g 版本后推出的服务器端工具--数据泵,作用是为了将数据库中的逻辑对象,比如表、用户、全库、表空间进 行导入,导出 命令解析 ATTACH ATTACH [[schema_name.]job_name] schema_name 表示用户名,job_name 表示导出的作…

oracle检查点

检 查 点 概述 ■l当修改数据时,需要首先将数据读入内存中(Buffer Cache),修改数据的同时,Oracle会记录重做信息(Redo)用于恢复。因 为有了重做信息的存在,Oracle不需要在提交时…

文献翻译:Java theory and practice: Fixing the Java Memory Model, Part 2

Java theory and practice: Fixing the Java Memory Model, Part 2 译:Java 理论与实践:修复 Java 内存模型,第 2 部分 翻译自:http://www.ibm.com/developerworks/library/j-jtp03304/(原文写于2004年3月&#xff0…

常用系统函数oracle

单行函数日期函数ADD_MONTHS(date, n):用于从一个日期值增加或减少一些月份 MONTHS_BETWEEN(date1, date2):判断两个日期之间相差的月份 LAST_DAY(date): 函数返回包含日期的月份的最后一天 ROUND(date[,fmt]): 将日期d按照fmt指定的格式舍入,fmt为字符串 TRU…

oracle游标

游标(cursor )是一个私有的SQL工作区域,是一个指向上下文区的句柄或指针,位于内存中的 "临时表"。 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某…