宽窄依赖、DAG RDD相关概念:

依赖

RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)。

窄依赖

窄依赖指的是每一个父RDD的Partition最多被子RDD的一个Partition使用。

宽依赖

窄依赖指的是每一个父RDD的Partition最多被子RDD的一个Partition使用,窄依赖我们形象的比喻为独生子女

Lineage

RDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列Lineage(即血统)记录下来,以便恢复丢失的分区。RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。

123456
val text = sc.textFile("/input/test.txt")val words = text.flatMap(_.split(" "))val date = words.map((_,1))val result = date.reduceByKey(_+_)date.dependenciesresult.dependencies

DAG的生成

DAG(Directed Acyclic Graph)叫做有向无环图,原始的RDD通过一系列的转换就就形成了DAG,根据RDD之间的依赖关系的不同将DAG划分成不同的Stage,对于窄依赖,partition的转换处理在Stage中完成计算。对于宽依赖,由于有Shuffle的存在,只能在parent RDD处理完成后,才能开始接下来的计算,因此宽依赖是划分Stage的依据。

RDD相关概念关系

输入可能以多个文件的形式存储在HDFS上,每个File都包含了很多块,称为Block。当Spark读取这些文件作为输入时,会根据具体数据格式对应的InputFormat进行解析,一般是将若干个Block合并成一个输入分片,称为InputSplit,注意InputSplit不能跨越文件。随后将为这些输入分片生成具体的Task。InputSplit与Task是一一对应的关系。随后这些具体的Task每个都会被分配到集群上的某个节点的某个Executor去执行。

1) 每个节点可以起一个或多个Executor。

2) 每个Executor由若干core组成,每个Executor的每个core一次只能执行一个Task。

3) 每个Task执行的结果就是生成了目标RDD的一个partiton。

注意: 这里的core是虚拟的core而不是机器的物理CPU核,可以理解为就是Executor的一个工作线程。而 Task被执行的并发度 = Executor数目 * 每个Executor核数。至于partition的数目:

1) 对于数据读入阶段,例如sc.textFile,输入文件被划分为多少InputSplit就会需要多少初始Task。

2) 在Map阶段partition数目保持不变。

3) 在Reduce阶段,RDD的聚合会触发shuffle操作,聚合后的RDD的partition数目跟具体操作有关,例如repartition操作会聚合成指定分区数,还有一些算子是可配置的。

RDD在计算的时候,每个分区都会起一个task,所以rdd的分区数目决定了总的的task数目。申请的计算节点(Executor)数目和每个计算节点核数,决定了你同一时刻可以并行执行的task。

比如的RDD有100个分区,那么计算的时候就会生成100个task,你的资源配置为10个计算节点,每个两2个核,同一时刻可以并行的task数目为20,计算这个RDD就需要5个轮次。如果计算资源不变,你有101个task的话,就需要6个轮次,在最后一轮中,只有一个task在执行,其余核都在空转。如果资源不变,你的RDD只有2个分区,那么同一时刻只有2个task运行,其余18个核空转,造成资源浪费。这就是在spark调优中,增大RDD分区数目,增大任务并行度的做法。

Spark之RDD实战2相关推荐

  1. Spark之RDD实战篇3

    键值对RDD.数据读取与保存.累加器.广播变量: 键值对RDD Spark 为包含键值对类型的 RDD 提供了一些专有的操作 在PairRDDFunctions专门进行了定义.这些 RDD 被称为 p ...

  2. Spark之RDD实战篇

    Spark RDD创建.转换.行动算子.RDD的持久化: RDD编程 在Spark中,RDD被表示为对象,通过对象上的方法调用来对RDD进行转换.经过一系列的transformations定义RDD之 ...

  3. Spark RDD/Core 编程 API入门系列 之rdd实战(rdd基本操作实战及transformation和action流程图)(源码)(三)...

    本博文的主要内容是: 1.rdd基本操作实战 2.transformation和action流程图 3.典型的transformation和action RDD有3种操作: 1.  Trandform ...

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

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

  5. Spark PersistenceEngine持久化引擎与领导选举代理机制内核原理深入剖析-Spark商业环境实战...

    本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark源码解读及商业实战指导,请持续关注本套博客.版权声明:本套Spark源码解读及商业实战归作者(秦凯新)所有,禁止转载,欢迎学习. Sp ...

  6. Spark Streaming 项目实战 (4) | 得到最近1小时广告点击量实时统计并写入到redis

      大家好,我是不温卜火,是一名计算机学院大数据专业大二的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...

  7. JavaSpark | RDD实战:WordCount

    JavaSpark | 算子 JavaSpark | RDD实战:WordCount JavaSpark | RDD实战:统计网站 pv 和 uv JavaSpark | RDD实战:二次排序 Jav ...

  8. JavaSpark | RDD实战:统计网站 pv 和 uv

    文章目录 1.pv 和 uv 1.1 什么是 PV 值? 1.2 什么是 UV 值? 2. 代码实战 JavaSpark | 算子 JavaSpark | RDD实战:WordCount JavaSp ...

  9. Spark 把RDD数据保存到hdfs单个文件中,而不是目录

    相比于Hadoop,Spark在数据的处理方面更加灵活方便.然而在最近的使用中遇到了一点小麻烦:Spark保存文件的的函数(如saveAsTextFile)在保存数据时都需要新建一个目录,然后在这个目 ...

最新文章

  1. 采购计算机的,如何采购计算机
  2. 自定义View(二),强大的Canvas
  3. deepfm代码参考
  4. 方差分析的MATLAB实现(单因子)
  5. html将页面分成三块_导航渲染流程你真的知道从输入URL到页面展示发生了什么吗?(内附思维导图)...
  6. 存储管理算法java代码
  7. python怎么命名未知数_Python4要来了?快来看看Python之父怎么说
  8. SpringCloud微服务(02):Ribbon和Feign组件,实现服务调用的负载均衡
  9. Atitit 多线程 什么时候使用多进程的选择场景 目录 1.1. 看实现,比如你的用node.js实现,那就没得选了,只能多进程 1 1.2. 如果用java这一类,可以选择多进程与多线程模式,或
  10. 阿里云服务器ECS到底是什么?
  11. 阳历和阴历的互转函数
  12. 为何QQ突然能注销了?近年推行的大好事知多少
  13. php html ubb,php UBB 解析实现代码
  14. 第十届江泽涵杯数学建模与计算机应用竞赛试题,2016江泽涵杯一等奖论文.doc...
  15. 插装式比例插装阀比例节流阀比例顺序阀放大器
  16. 100+大数据开源处理工具汇总
  17. vue 中使用 marked + highlight.js 代码高亮
  18. Intellij IDEA如何添加注释并且修改注释样式
  19. Java SE基础(更新中)
  20. centos7安装配置vsftp搭建FTP

热门文章

  1. php修改隐藏域非法提交,PHP get、post变量放在表单隐藏域示例
  2. linkedhashmap遍历_Java集合:浅谈LinkedHashMap、LinkedHashSet源码及LRU算法实现
  3. python3 循环写入一对多键值对_Python 3.9 正式版要来了,会有哪些新特性?
  4. php mysql 框架 php5.2_简单快速安装Apache+PHP+MySql服务环境(四)—— 将php版本升级到7.2...
  5. 如何使用go打出hell word
  6. java学习日记之小技巧(跟着变量走一走)
  7. SEO优化之Title 和 Meta 标签
  8. tlplayer for ios V1.0
  9. Delphi-IOCP学习笔记九======性能测试和IOCP源码下载5000个连接数
  10. 重造车轮—基于JQ的商品展示放大镜