RDD底层实现原理

RDD是一个分布式数据集,顾名思义,其数据应该分部存储于多台机器上。事实上,每个RDD的数据都以Block的形式存储于多台机器上,下图是Spark的RDD存储架构图,其中每个Executor会启动一个BlockManagerSlave,并管理一部分Block;而Block的元数据由Driver节点的BlockManagerMaster保存。BlockManagerSlave生成Block后向BlockManagerMaster注册该Block,BlockManagerMaster管理RDD与Block的关系,当RDD不再需要存储的时候,将向BlockManagerSlave发送指令删除相应的Block。

图2 RDD存储原理

RDD cache的原理

RDD的转换过程中,并不是每个RDD都会存储,如果某个RDD会被重复使用,或者计算其代价很高,那么可以通过显示调用RDD提供的cache()方法,把该RDD存储下来。那RDD的cache是如何实现的呢?

RDD中提供的cache()方法只是简单的把该RDD放到cache列表中。当RDD的iterator被调用时,通过CacheManager把RDD计算出来,并存储到BlockManager中,下次获取该RDD的数据时便可直接通过CacheManager从BlockManager读出。

RDD dependency与DAG

RDD提供了许多转换操作,每个转换操作都会生成新的RDD,这是新的RDD便依赖于原有的RDD,这种RDD之间的依赖关系最终形成了DAG(Directed Acyclic Graph)。

RDD之间的依赖关系分为两种,分别是NarrowDependency与ShuffleDependency,其中ShuffleDependency为子RDD的每个Partition都依赖于父RDD的所有Partition,而NarrowDependency则只依赖一个或部分的Partition。下图的groupBy与join操作是ShuffleDependency,map和union是NarrowDependency。

图3 RDD dependency

RDD partitioner与并行度

每个RDD都有Partitioner属性,它决定了该RDD如何分区,当然Partition的个数还将决定每个Stage的Task个数。当前Spark需要应用设置Stage的并行Task个数(配置项为:spark.default.parallelism),在未设置的情况下,子RDD会根据父RDD的Partition决定,如map操作下子RDD的Partition与父Partition完全一致,Union操作时子RDD的Partition个数为父Partition个数之和。

如何设置spark.default.parallelism对用户是一个挑战,它会很大程度上决定Spark程序的性能。

参考:http://www.cnblogs.com/shenh062326/p/4130973.html

转载于:https://www.cnblogs.com/bonelee/p/6039719.html

spark RDD底层原理相关推荐

  1. Spark底层原理详细解析(深度好文,建议收藏)

    Spark简介 Apache Spark是用于大规模数据处理的统一分析引擎,基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量硬件之上, ...

  2. Spark底层原理详细解析

    Spark简介 Apache Spark是用于大规模数据处理的统一分析引擎,基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量硬件之上, ...

  3. Spark RDD、DataFrame原理及操作详解

    RDD是什么? RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用. RDD内部可以 ...

  4. Spark一路火花带闪电——Spark底层原理介绍

    文章目录 Spark计算引擎原理 1.1 术语 1.1.1 Application:Spark应用程序 1.1.2 Driver:驱动程序 1.1.3 Cluster Manager:资源管理器 1. ...

  5. 学习笔记Spark(三)—— Spark架构及原理(spark架构、spark RDD)

    一.Spark架构 1.1.基本组件 Cluster Manager 在standalone模式中即为Master主节点,控制整个集群,监控worker.在YARN模式中为资源管理器. Worker ...

  6. 深入理解Spark 2.1 Core (一):RDD的原理与源码分析

    摘要 本文提出了分布式内存抽象的概念--弹性分布式数据集(RDD,Resilient Distributed Datasets),它具备像MapReduce等数据流模型的容错特性,并且允许开发人员在大 ...

  7. Spark RDD使用详解1--RDD原理

    RDD简介 在集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(Resilient Distributed Dataset,RDD).RDD是Spark的最基本抽象,是对分布式内存的抽象使 ...

  8. Spark RDD使用详解--RDD原理

    RDD简介 在集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(Resilient Distributed Dataset,RDD).RDD是Spark的最基本抽象,是对分布式内存的抽象使 ...

  9. Spark SQL运行原理和架构

    一 Spark SQL运行架构 Spark SQL对SQL语句的处理和关系型数据库类似,即词法/语法解析.绑定.优化.执行.Spark SQL会先将SQL语句解析成一棵树,然后使用规则(Rule)对T ...

最新文章

  1. mysql正则表达式配置,MySQL REGEXP:正则表达式
  2. 10.27 afternoon similated match
  3. 74cms 注入exp
  4. r psm倾向性匹配_南瓜香料指标psm如何规划季节性广告
  5. 蓝桥杯第六届国赛JAVA真题----切开字符串
  6. 用 cctld工具创建带有国家代码的IP地址表
  7. 二自由度振动仿真:matlab直接解微分方程virtual.lab motion仿真
  8. 初识EMCASCRIPT 模块化
  9. conda install 报错PackagesNotFoundError: 以及和合理使用源的策略
  10. JavaWeb学习笔记(全)(狂神)
  11. Terminal Emulator for Android(安卓终端模拟器)的使用
  12. 手机屏幕 高宽有哪些_苹果手机屏幕有哪些尺寸?
  13. 斐波那契数列+pyton
  14. 纯css3彩色3d雪糕
  15. 苹果在华一天收入可抵与唯冠6000万美元
  16. 如何选购笔记本电脑?
  17. ChatGPT 常见错误原因及解决方案:报错、回答不完整、网络错误等
  18. uvm snippets
  19. 推荐免费的svn空间
  20. jarvis oj(web wp)

热门文章

  1. php怎么随机生成二个中文,PHP生成随机字符串的两种办法
  2. java 运行环境变量,java运行环境 和 环境变量的配置
  3. float布局设置同一行行高一样_布局思想:大事化小、先行后列、见缝插针
  4. 汉川一中2021高考成绩查询,2021年汉川市高考状元名单资料,今年汉川市高考状元多少分...
  5. flink批处理访问mysql_Flink 异步IO访问外部数据(mysql篇)
  6. sql 树状结构中知道 父节点与孙节点_集群环境中使用Zookeeper实现分布式幂等控制...
  7. mysql为查询结果字段赋默认值
  8. PyTorch中的Element-wise operations
  9. 深度学习生态圈【详解深度学习工具Keras】
  10. html 找不到文件,WebView 加载本地HTML 文件 提示找不到该文件