spark RDD底层原理
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底层原理相关推荐
- Spark底层原理详细解析(深度好文,建议收藏)
Spark简介 Apache Spark是用于大规模数据处理的统一分析引擎,基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量硬件之上, ...
- Spark底层原理详细解析
Spark简介 Apache Spark是用于大规模数据处理的统一分析引擎,基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量硬件之上, ...
- Spark RDD、DataFrame原理及操作详解
RDD是什么? RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用. RDD内部可以 ...
- Spark一路火花带闪电——Spark底层原理介绍
文章目录 Spark计算引擎原理 1.1 术语 1.1.1 Application:Spark应用程序 1.1.2 Driver:驱动程序 1.1.3 Cluster Manager:资源管理器 1. ...
- 学习笔记Spark(三)—— Spark架构及原理(spark架构、spark RDD)
一.Spark架构 1.1.基本组件 Cluster Manager 在standalone模式中即为Master主节点,控制整个集群,监控worker.在YARN模式中为资源管理器. Worker ...
- 深入理解Spark 2.1 Core (一):RDD的原理与源码分析
摘要 本文提出了分布式内存抽象的概念--弹性分布式数据集(RDD,Resilient Distributed Datasets),它具备像MapReduce等数据流模型的容错特性,并且允许开发人员在大 ...
- Spark RDD使用详解1--RDD原理
RDD简介 在集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(Resilient Distributed Dataset,RDD).RDD是Spark的最基本抽象,是对分布式内存的抽象使 ...
- Spark RDD使用详解--RDD原理
RDD简介 在集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(Resilient Distributed Dataset,RDD).RDD是Spark的最基本抽象,是对分布式内存的抽象使 ...
- Spark SQL运行原理和架构
一 Spark SQL运行架构 Spark SQL对SQL语句的处理和关系型数据库类似,即词法/语法解析.绑定.优化.执行.Spark SQL会先将SQL语句解析成一棵树,然后使用规则(Rule)对T ...
最新文章
- mysql正则表达式配置,MySQL REGEXP:正则表达式
- 10.27 afternoon similated match
- 74cms 注入exp
- r psm倾向性匹配_南瓜香料指标psm如何规划季节性广告
- 蓝桥杯第六届国赛JAVA真题----切开字符串
- 用 cctld工具创建带有国家代码的IP地址表
- 二自由度振动仿真:matlab直接解微分方程virtual.lab motion仿真
- 初识EMCASCRIPT 模块化
- conda install 报错PackagesNotFoundError: 以及和合理使用源的策略
- JavaWeb学习笔记(全)(狂神)
- Terminal Emulator for Android(安卓终端模拟器)的使用
- 手机屏幕 高宽有哪些_苹果手机屏幕有哪些尺寸?
- 斐波那契数列+pyton
- 纯css3彩色3d雪糕
- 苹果在华一天收入可抵与唯冠6000万美元
- 如何选购笔记本电脑?
- ChatGPT 常见错误原因及解决方案:报错、回答不完整、网络错误等
- uvm snippets
- 推荐免费的svn空间
- jarvis oj(web wp)
热门文章
- php怎么随机生成二个中文,PHP生成随机字符串的两种办法
- java 运行环境变量,java运行环境 和 环境变量的配置
- float布局设置同一行行高一样_布局思想:大事化小、先行后列、见缝插针
- 汉川一中2021高考成绩查询,2021年汉川市高考状元名单资料,今年汉川市高考状元多少分...
- flink批处理访问mysql_Flink 异步IO访问外部数据(mysql篇)
- sql 树状结构中知道 父节点与孙节点_集群环境中使用Zookeeper实现分布式幂等控制...
- mysql为查询结果字段赋默认值
- PyTorch中的Element-wise operations
- 深度学习生态圈【详解深度学习工具Keras】
- html 找不到文件,WebView 加载本地HTML 文件 提示找不到该文件