2.6.1 Lineage

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

(1)读取一个HDFS文件并将其中内容映射成一个个元组

scala> val wordAndOne = sc.textFile("/fruit.tsv").flatMap(_.split("")).map((_,1))

wordAndOne: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[22] at map at :24

(2)统计每一种key对应的个数

scala> val wordAndCount = wordAndOne.reduceByKey(_+_)

wordAndCount: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[23] at reduceByKey at :26

(3)查看“wordAndOne”的Lineage。通过toDebugString函数:会发现从下往上,依次经历了HadoopRDD—MapPartitionsRDD—flatMap—map几个过程

scala> wordAndOne.toDebugString

res5: String =

(2) MapPartitionsRDD[22] at map at :24 []

| MapPartitionsRDD[21] at flatMap at :24 []

| /fruit.tsv MapPartitionsRDD[20] at textFile at :24 []

| /fruit.tsv HadoopRDD[19] at textFile at :24 []

(4)查看“wordAndCount”的Lineage。在上面基础上又经历了reduceByKey,且已显明是一个ShuffledRDD

scala> wordAndCount.toDebugString

res6: String =

(2) ShuffledRDD[23] at reduceByKey at :26 []

+-(2) MapPartitionsRDD[22] at map at :24 []

| MapPartitionsRDD[21] at flatMap at :24 []

| /fruit.tsv MapPartitionsRDD[20] at textFile at :24 []

| /fruit.tsv HadoopRDD[19] at textFile at :24 []

(5)查看“wordAndOne”的依赖类型。通过dependencies函数,显示出是OneToOneDependency,即窄依赖:

scala> wordAndOne.dependencies

res7: Seq[org.apache.spark.Dependency[_]] = List(org.apache.spark.OneToOneDependency@5d5db92b)

(6)查看“wordAndCount”的依赖类型。通过dependencies函数,显示出是ShuffleDependency,即宽依赖:

scala> wordAndCount.dependencies

res8: Seq[org.apache.spark.Dependency[_]] = List(org.apache.spark.ShuffleDependency@63f3e6a8)

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

2.6.2 窄依赖

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

2.6.3 宽依赖

宽依赖指的是多个子RDD的Partition会依赖同一个父RDD的Partition,会引起shuffle,总结:宽依赖我们形象的比喻为超生(父RDD的各个分区都被子RDD使用)

2.6.4 DAG

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

2.6.5 任务划分(面试重点)

RDD任务切分中间分为:Application、Job、Stage和Task

1)Application:初始化一个SparkContext即生成一个Application

2)Job:一个Action算子就会生成一个Job

3)Stage:根据RDD之间的依赖关系的不同将Job划分成不同的Stage,遇到一个宽依赖则划分一个Stage。

4)Task:Stage是一个TaskSet,将Stage划分的结果发送到不同的Executor执行即为一个Task。(Stage中有多个分区,一个分区就是一个任务,即taskSet,这些tasks又会被分配到不同Executor中取执行)

注意:Application->Job->Stage-> Task每一层都是1对n的关系。

(本文为系列文章,关注作者阅读其它部分内容,总有一篇是你欠缺的,技术无止境,且学且珍惜!!!)

spark将rdd转为string_大数据技术之SparkCore(三)RDD依赖关系相关推荐

  1. 大数据技术基础实验三:HDFS实验——部署HDFS

    大数据技术基础实验三:HDFS实验--部署HDFS 文章目录 大数据技术基础实验三:HDFS实验--部署HDFS 一.前言 二.实验要求 三.实验原理 1.什么是HDFS? 2.HDFS的体系结构 3 ...

  2. 大数据产品开发流程规范_大数据技术思想入门(三):分布式文件存储的流程

    如果你不喜欢阅读文字的话,可以选择滑到最后看 视频讲解 哟~~~ 进程和 RPC 在上一篇文章中,我们讲解了要解决好大数据集的存储问题,需要引入一个主从结构的集群,其中,主服务器用于存储元数据,从服务 ...

  3. 云计算与大数据技术应用 第三章

    虚拟化技术 虚拟化技术简介 虚拟化技术的概念 虚拟化bai是指计算元件在虚du拟的基础上zhi而不是真实的基础上运行.虚dao拟zhuan化技术可以扩大硬shu件的容量,简化软件的重新配置过程.CPU ...

  4. 尚硅谷大数据技术Spark教程-笔记02【SparkCore(核心编程,map、mapPartitions、mapPartitionsWithIndex、flatMap、glom、groupBy)】

    视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[Spark(概述.快速上手.运行环境.运行架构)] 尚硅谷大数据技术Spark教 ...

  5. 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】

    视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[Spark(概述.快速上手.运行环境.运行架构)] 尚硅谷大数据技术Spark教 ...

  6. 大数据技术的概论(2)

    1.5大数据带来多大变革 1技术变革特征 2管理模式变革(人力,流程,制造,市场) 1)数据资产化 2)决策智能化 3信息技术IT向数据技术DI的转变 相关资料:当地时间11月23日,世界贸易组织(W ...

  7. 大数据技术常用的工具有哪些

    数据是一个庞大而复杂的数据集合,它包含的内容有很多,比如,气候信息.公开信息.网购信息.网络日记.视频图像.病历等等.这些都是大数据的原始资料来源.这些原始数据量非常庞大,需要用专业的工具来进行处理, ...

  8. 大数据技术人年度盛事! BDTC 2016将于12月8-10日在京举行

    2016年12月8日-10日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所和CSDN共同协办的2016中国大数据技术大会(BigDataTechnologyCo ...

  9. 2016中国大数据技术大会六折抢票最后一周(附部分讲师名单)

    2016年12月8日-10日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所和CSDN共同协办的2016中国大数据技术大会(Big Data Technology ...

最新文章

  1. Netty源码解析1-Buffer
  2. STL——vector
  3. 【跃迁之路】【578天】程序员高效学习方法论探索系列(实验阶段335-2018.09.06)...
  4. netflix feign概述
  5. 多重判定系数怎么求_关于多重共线性
  6. 139.00.007 Git学习-Cheat Sheet
  7. SQL ABAP ST05 hint
  8. Docker中安装Jenkins实时发布.net core 项目(一)
  9. Java讲课笔记04:变量与常量
  10. python vimIDE环境
  11. Atamai 手术导航软件开发包
  12. 80 行代码爬取豆瓣 Top250 电影信息并导出到 CSV 及数据库
  13. Data Mining with R
  14. 药企如何应对计算机系统验证?浪潮GMP管理保驾护航
  15. tableau制作中国地图(全)
  16. 华普天健会计师事务所管理合伙人朱宗瑞:期待数据资产价值在财务报表里充分体现...
  17. Fe3O4纳米颗粒的表面接枝修饰/氨基乙酸|L-半胱氨酸(L-Cys)修饰的Fe3O4包裹TiO2(Fe3O4@TiO2/L-Cys)复合纳米粒子
  18. 这个春天,邀你一起探寻AI与青春的碰撞之力
  19. 如何将OFD文件转成WORD?每天免费用
  20. 新中大连接服务器文件,新中大软件服务器地址修改

热门文章

  1. 【Java Web】Myeclipse下运用maven管理项目jar包
  2. 分析一次STP无法生效的故障
  3. 第1章:初始C#及其开发环境
  4. scale Database
  5. Maven 常见问题
  6. 流畅的验证组件:FluentValidation
  7. linux进程与它的堆栈空间
  8. 工具-Xmind常用快捷键/使用
  9. Spring Cloud 搭建 Hystrix Dashboard和Turbine
  10. golang: 类型转换和类型断言