Spark任务提交与执行之RDD的创建、转换及DAG构建

本文通过wordcount示例探讨Spark任务的提交与执行,重点讲解RDD的创建(如textFile、flatMap、map)及转换过程,特别是DAG的构建。在textFile步骤中,涉及HadoopRDD的创建和窄依赖;flatMap用于单词拆分;map操作保持数据结构;reduceByKey通过隐式转换和combineByKeyWithClassTag进行聚合,可能创建ShuffledRDD并形成ShuffleDependency。
摘要由CSDN通过智能技术生成

在这里通过使用wordcount例子来学习Spark是如何进行任务的提交与执行。本次先进行RDD的创建、转换以及DAG的构建进行学习。
整个wordcount的代码可以简单如下实现:

sc.textFile("/library/wordcount/input").flatMap(_.split(" ")).map(word => (word, 1)).reduceByKey(_ + _).collect.foreach(println)

程序的DAG图如下:
这里写图片描述

下面对每一步进行具体分析

1. textFile

这里写图片描述

SparkContext的testFile方法调用了hadoopFile方法用于创建HadoopRDD;其中hadoopFile方法包含三个步骤:
1. 将Hadoop的Configuration广播出去;
2. 设置文件输入路径;
3. 构建HadoopRDD实例对象;
对于构建的HadoopRDD实例对象调用map方法获得文件的内容,保存在MapPartitionsRDD类型的RDD中。在map方法中会调用clean方法,该方法实际调用ClosureCleaner的clean方法,这里是为了清除闭包中的不能被序列化的变量,防止RDD在网络传输过程中反序列化失败。

  /**
   * Read a text file from HDFS, a local file system (available on all nodes), or any
   * Hadoop-supported file system URI, and return it as an RDD of Strings.
   */
  def textFile(
      path: String,
      minPartitions: Int = defaultMinPartitions): RDD[String] = withScope {
    assertNotStopped()
    hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
      minPartitions).map(pair => pair._2.toString)
  }

  def hadoopFile[K, V](
      path: String,
      inputFormatClass: Class[_ <: InputFormat[K, V]],
      keyClass: Class[K],
      valueClass: Class[V],
      minPartitions: Int = defaultMinPartitions): RDD[(K, V)] = withScope {
    assertNotStopped()
    // A Hadoop configuration can be about 10 KB, which is pretty big, so broadcast it.
    val confBroadcast = broadcast(new SerializableConfiguration(hadoopConfiguration))
    val setInputPathsFunc = (jobConf: JobConf) => FileInputFormat.setInputPaths(jobCo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SparkRDD执行流程遵循有向无环图(DAG)的方式进行。下面是关于DAG执行流程图生成的步骤: 1. 转换操作:首先,通过RDD转换操作(例如map、filter、reduce等)定义数据处理的逻辑。这些操作将构建一个RDD转换图。 2. 逻辑优化:Spark会对RDD转换图进行逻辑优化,以提高执行效率。例如,它可能会合并相邻的转换操作或推测执行等。 3. 任务划分:Spark会将RDD转换图划分为一系列的阶段(Stage)。每个阶段由一组具有相同父RDD依赖关系的转换操作组成。 4. 任务划分优化:对于每个阶段,Spark会将其划分为一组任务(Task),以便并行执行任务划分也可以根据数据本地性进行优化,尽量将任务分配给与数据最接近的节点。 5. 任务调度:一旦任务划分完成,Spark会将这些任务提交给集群管理器进行调度,以在集群的多个节点上并行执行。 6. 依赖关系跟踪:在执行期间,Spark会跟踪RDD之间的依赖关系,并确保所有依赖的转换操作被正确执行。 7. 数据传输和处理:在任务执行期间,Spark将数据从一个节点传输到另一个节点,并对其进行相应的转换操作。 8. 结果返回:一旦所有任务都完成,Spark将结果返回给驱动程序,供进一步处理或输出。 总之,SparkRDD执行流程图生成步骤涉及转换操作定义、逻辑优化、任务划分、任务划分优化、任务调度、依赖关系跟踪、数据传输和处理以及结果返回。这些步骤确保了高效的分布式数据处理和计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值