首页 > 其他分享 >Spark中RDD阶段划分

Spark中RDD阶段划分

时间:2024-02-21 16:25:14浏览次数:28  
标签:sparkcontext 调用 shuffle scala RDD 划分 DAGScheduler 阶段 Spark

分析源码步骤:

第一步程序入口:

 第二步一直查看runjob方法,可以看出collect()是RDD行动算子,与Job运行提交相关

rdd.scala

RDD.scala

 sparkcontext.scala

sparkcontext.scala

  sparkcontext.scala

  sparkcontext.scala

 第三步runJob()与DAG调度有关

sparkcontext.scala

第四步runJob()核心代码 - -查看其中提交作业submitJob()的代码

DAGScheduler.scala

 

 第五步:搜索handleJobSubmitted,handleJobSubmitted中createResultStage()方法会创建ResultStage,即为最后一个阶段finalStage。补充:每一个行动算子都会调用runJob(),最后会new ActiveJob

 DAGScheduler.scala

  DAGScheduler.scala

  DAGScheduler.scala

第六步createResultStage()方法中,先调用getOrCreateParentStages(),获得或创建父阶段,因为只有父阶段先执行完,才会执行当前的阶段。然后再创建ResultStage

  DAGScheduler.scala

 第七步:核心代码:进入getOrCreateParentStages(),调用getShuffleDependencies()返回值是HashSet,存放是的依赖关系,再对每一个shuffleDep,调用getOrCreateShuffleMapStage()创建shuffle阶段。即一个shuffle依赖就会创建一个shuffle阶段

  DAGScheduler.scala

   DAGScheduler.scala中 getShuffleDependencies此方法是获取依赖关系

 第八步:进入getOrCreateShuffleMapStage(),调用createShuffleMapStage(),创建shuffle阶段new ShuffleMapStage

   DAGScheduler.scala

    DAGScheduler.scala

 

标签:sparkcontext,调用,shuffle,scala,RDD,划分,DAGScheduler,阶段,Spark
From: https://www.cnblogs.com/huifeidezhuzai/p/18025534

相关文章

  • spark实验五Spark SQL
    1.SparkSQL基本操作将下列JSON格式数据复制到Linux系统中,并保存命名为employee.json。{"id":1,"name":"Ella","age":36}{"id":2,"name":"Bob","age":29}{"id":3,"name"......
  • spark实验四RDD 编程初级实践
    1.spark-shell交互式编程请到本教程官网的“下载专区”的“数据集”中下载chapter5-data1.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……请根......
  • RDD算子
    分布式集合对象上的API称之为算子算子分为两类:transformation算子:指返回值仍然是rdd,类似于stream里的中间流这类算子与中间流相同,是懒加载的action算子:返回值不是rdd,类似于stream里的终结流 常见算子:1.map(func):将rdd的数据一条一条的处理,返回新的rdd,和stream流的......
  • spark编写WordCount代码(scala)
    代码demopackagecom.spark.wordcountimportorg.apache.spark.SparkContextimportorg.apache.spark.SparkContext._importorg.apache.spark.SparkConfobjectWordCount{defmain(args:Array[String]){//文件位置valinputFile="hdfs://192.168.10......
  • spark为什么比mapreduce快?
    spark为什么比mapreduce快?首先澄清几个误区:1:两者都是基于内存计算的,任何计算框架都肯定是基于内存的,所以网上说的spark是基于内存计算所以快,显然是错误的2;DAG计算模型减少的是磁盘I/O次数(相比于mapreduce计算模型而言),而不是shuffle次数,因为shuffle是根据数据重组的次数而定,所......
  • 2月18日 spark实验三 hadoop和spark的安装和使用
    1.安装Hadoop和Spark进入Linux系统,参照本教程官网“实验指南”栏目的“Hadoop的安装和使用”,完成Hadoop伪分布式模式的安装。完成Hadoop的安装以后,再安装Spark(Local模式)。2.HDFS常用操作使用hadoop用户名登录进入Linux系统,启动Hadoop,参照相关Hadoop书籍或网......
  • 2月17日spark实验2 Scala 语言基础
    计算级数请用脚本的方式编程计算并输出下列级数的前n项之和Sn,直到Sn刚好大于或等于q为止,其中q为大于0的整数,其值通过键盘输入。例如,若q的值为50.0,则输出应为:Sn=50.416695。请将源文件保存为exercise2-1.scala,在REPL模式下测试运行,测试样......
  • pyspark集成访问hive数据踩坑记录
    当前环境anaconda3、python3.9.13、jupyter需要安装的pyspark、py4jpyspark和py4j的离线安装包地址Linksforpyspark(tsinghua.edu.cn)和Linksforpy4j(tsinghua.edu.cn)一开我自己没有仔细的对应版本,找了一个pyspark3.4.1的包正常安装上去了,通过pyspark进入shell可以正......
  • 整数划分 题解
    题目描述如何把一个正整数N(N长度<20)划分为M(M>1)个部分,使这M个部分的乘积最大。N、M从键盘输入,输出最大值及一种划分方式。输入格式第一行一个正整数T(T<=10000),表示有T组数据。接下来T行每行两个正整数N,M。输出格式对于每组数据第一行输出最大值。第二行输出划分方案,将N按......
  • Scala与spark的关系
    Spark集群是基于ApacheSpark的分布式计算环境,用于处理大规模数据集的计算任务。ApacheSpark是一个开源的、快速而通用的集群计算系统,提供了高级的数据处理接口,包括SparkSQL、SparkStreaming、MLlib(机器学习库)和GraphX(图计算库)。Spark的一个主要特点是能够在内存中进行数据处......