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

一、RDD概念

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

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

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

二、RDD的典型执行过程

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的划分

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原理:概念与架构、工作机制

Spark初识-弹性分布式数据集RDD相关推荐

  1. spark学习笔记:弹性分布式数据集RDD(Resilient Distributed Dataset)

    弹性分布式数据集RDD 1. RDD概述 1.1 什么是RDD RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可 ...

  2. ibatis 存储过程 结果集 map_「大数据」(七十五)Spark之弹性分布式数据集

    [导读:数据是二十一世纪的石油,蕴含巨大价值,这是·情报通·大数据技术系列第[75]篇文章,欢迎阅读和收藏] 1 基本概念 弹性分布式数据集( RDD , Resilient Distributed ...

  3. Spark弹性分布式数据集RDD:基于内存集群计算的容错抽象

    摘要 我们提出的弹性分布式数据集(RDDs),是一个让程序员在大型集群上以容错的方式执行基于内存计算的分布式内存抽象.RDDs受启发于两类使用当前计算框架处理不高效的应用:迭代算法和交互式数据挖掘工具 ...

  4. 颠覆大数据分析之Spark弹性分布式数据集

    Spark中迭代式机器学习算法的数据流可以通过图2.3来进行理解.将它和图2.1中Hadoop MR的迭代式机器学习的数据流比较一下.你会发现在Hadoop MR中每次迭代都会涉及HDFS的读写,而在 ...

  5. 《Spark大数据分析实战》——1.4节弹性分布式数据集

    本节书摘来自华章社区<Spark大数据分析实战>一书中的第1章,第1.4节弹性分布式数据集,作者高彦杰 倪亚宇,更多章节内容可以访问云栖社区"华章社区"公众号查看 1. ...

  6. Spark的核心RDD(Resilient Distributed Datasets弹性分布式数据集)

    Spark的核心RDD(Resilient Distributed Datasets弹性分布式数据集) 铺垫 在hadoop中一个独立的计算,例如在一个迭代过程中,除可复制的文件系统(HDFS)外没有 ...

  7. RDD论文翻译 --弹性分布式数据集:一种基于内存的集群计算的容错性抽象方法

    原文出处:http://www.eecs.berkeley.edu/Pubs/TechRpts/2011/EECS-2011-82.pdf 译文原处:http://blog.csdn.net/cj77 ...

  8. Spark之Spark Core (RDD弹性分布式数据集)

    RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合.在 Spark 中,对数据的 ...

  9. RDD(弹性分布式数据集)

    1.什么是RDD RDD(分布式弹性数据集)是对分布式计算的抽象,代表要处理的数据,一个数据集,RDD是只读分区的集合.数据被分片,分成若干个数据分片,存储到不同的节点中,可以被并行的操作,所以叫分布 ...

最新文章

  1. Homebrew安装不要改hosts了,直接用这个国内源才爽!
  2. matlab ga rbf,GA PSO优化的RBF神经网络
  3. java杰森_java – 杰克逊杰森Mapper:没有场或空场?
  4. springcloud 组件_深入理解 Spring Cloud 核心组件与底层原理
  5. python多线程锁有没有优先级别_全面解析python线程优先级队列(queue)原理
  6. [转]Spring事务tx:annotation-driven/
  7. http请求头中Referer的作用及危害
  8. APP推广有效果,APP地推要以用户需求为核心
  9. java web初级面试题_Java Web应用程序初学者教程
  10. day7-mysql引擎和索引
  11. 远程控制电脑的实现方法
  12. 分享几款常用的MySQL管理工具
  13. 传智播客java测试题_传智播客Java基础第二阶段习题
  14. SpreadJS 14.2.5 中文版
  15. 微信小程序必看api demo源码
  16. PIXHAWK飞行模式
  17. You have 3 unapplied migration(s). Your project may not work properly until you apply the migrations
  18. 怎么把两个mp3音频合成一个?
  19. 计算机用户账户类型有哪些,2010年职称计算机考试:用户账户类型
  20. C# NPOI 导出Excel 日期格式

热门文章

  1. hilbert谱 matlab,怎么在matlab中做信号hilbert边际谱分析
  2. python制作圆形按钮_C#圆形按钮,非常漂亮动态
  3. Python 异常处理-Python零基础入门教程
  4. jq之mousedown
  5. 从尾到头打印单链表(C语言)
  6. j2me安装_Java第一步 JDK安装
  7. 微型计算机各部件之间通过总线传递各种信息,2015年9月计算机一级考试基础及MSOffice应用选择真题...
  8. 用java输入学生姓名查询成绩_编写一个Java程序,提示用户输入学生数量,学生姓名和他们的成绩,并按照成绩的降序打印学生姓名...
  9. mysql的使用优化问题吗_如何对 mysql 进行优化的问题
  10. Java HashMap与Hashtable数据结构和特点+HashSet简述