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,一经查实,立即删除!

相关文章

nmon

1).采集数据: #nmon -s10 -c60 -f -m /home/ 参数解释: -s10 每 10 秒采集一次数据。 -c60 采集 60 次,即为采集十分钟的数据。 -f 生成的数据文件名中包含文件创建的时间。 -m 生成的数据文件的存放目录。 这样就会生成一个 nmon 文件&…

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

Iptables防火墙原理

一、IPTABLES概念 iptables是隔离主机以及网络的工具,通过自己设定的规则以及处理动作对数据报文进行检测以及处理。从设备上分类,防火墙分为软件防火墙、硬件防火墙、芯片级防火墙。从技术上分类,防火墙分为数据包过滤型防火墙、应用代理型防火墙。这是因为四层模型的每一…

创造型模式——单例模式

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

trap命令

trap命令用于指定在接收到信号后将要采取的行动,信号的信息前面已经提到。 trap 命令的一种常见用途是在脚本程序被中断时完成清理工作。 历史上,shell 总是用数字来代表信号,而新的脚本程字应该使用信号的名字,它们保存在用#include命令包含进来的signal.h头文件中,在使用…

创造型模式——建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 一、介绍…

shell知识点

静态语言是编译型语言,强类型的语言 如C,C++,java(面向对象),C#, 动态语言是解释型语言,弱类型的语言,边解释边执行 ,需要解释器,解释器是用静态语言开发的如shell(面向过程), perl,asp,asp.net,php,python(面向对象) 脚本执行 1.…

创造性模式——原型模式

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

Consider defining a bean of type ‘java.lang.String‘ in your configuration

Consider defining a bean of type ‘java.lang.String’ in your configuration 总结了网上的几种解决方案: 1、多余的autowired 2、待实例化的类里必须有默认的构造方法(即没有参数的那种) Consider defining a bean of type ‘XXXX’ …

SpringBoot-探索回顾Spring框架本质

自始至终,SpringBoot框架都是为了能够帮助使用Spring框架的开发 快速高效地构建 一个个基于Spring框架以及Spring生态体系的应用解决方案。要深刻理解SpringBoot框架,首先我们需要深刻理解Spring框架。 一、Spring 中的 IoC、DI 和 DL 部分Java开发者对…

redis精解

概念Redis是完全开源免费的,遵守BSD协议,是-一个高性能的key-value数据库。它支持存储的value类型很多,包括string(字符串)、list(链表)、set(集合)、(Zset(有序集合),这些数据类型都支持。 push/pop、add/remove及 取交集和并集及更丰富的操作,Redis支持各种不同方式的排序)…

@SpringBootApplication揭秘

一、SpringBoot初体验 一个典型的SpringBoot应用长什么样子呢?如果我们使用http://start.spring.io/创建一个最简单的依赖Web模块的SpringBoot应用,一般情况下, 我们会得到一个SpringBoot应用的启动类,如下面代码所示&#xff1a…

SpringApplication:SpringBoot程序启动的一站式解决方案

我们说SpringBoot是Spring框架对“约定优先于配置(Convention Over Configuration)"理念的最佳实践的产物,一个典型的SpringBoot应用本质上其 实就是一个基于Spring框架的应用 如果非说SpringBoot微框架提供了点儿自己特有的东西,在核心类层面&…

了解spring-boot-starter

SpringBoot提供了针对日常企业应用研发各种场景的spring-boot-starter自动配置 依赖模块,如此多“开箱即用”的依赖模块,使得开发各种场景的Spring应用 更加快速和高效,本文会就几个常见的通用spring-boot-starter模块进行了解 一、约定优先于…

常用脚本

mysql状态收集 #! /bin/bash#mysql for zabbixUptime() {mysqladmin status I awk [print $2]}Slow_ queries() {mysqladmin status | awk [print $9]} ICom_ insert() {mysqladmin extended-status |awk /<Com_ insertl>/[print $4]}Com_ delete() {mysqladmi…