zoukankan      html  css  js  c++  java
  • 【杂谈】RDD-运行-2

    RDD是每个分区独立执行,并行执行的,执行路径

    Executor.launchTask() -> 
        Task.runTask() -> 
            RDD.iterator ->    
                RDD.compute() or from checkpoin
    

    有2种类型的Task, ShuffleMapTask 和 ResultTask。分别对应Shuffle task,action task(生产了计算结果,可以返回给driver了)

        ShuffleMapTask:
    override def runTask(context: TaskContext): MapStatus = {
    	  writer = manager.getWriter[Any, Any](dep.shuffleHandle, partitionId, context)
                  // 每个分区分别计算
    	  writer.write(rdd.iterator(partition, context).asInstanceOf[Iterator[_ <: Product2[Any, Any]]])
     }
    
    
    ResultTask:
    	override def runTask(context: TaskContext): U = {
    	
    	val ser = SparkEnv.get.closureSerializer.newInstance()
    	// 反序列出RDD的元信息和算子
    	val (rdd, func) = ser.deserialize[(RDD[T], (TaskContext, Iterator[T]) => U)](
    	  ByteBuffer.wrap(taskBinary.value), Thread.currentThread.getContextClassLoader)
    	_executorDeserializeTime = System.currentTimeMillis() - deserializeStartTime
    
    	// 在对应的分区上执行算子,计算结果会被通过网络返回给driver
    	func(context, rdd.iterator(partition, context))
      }
  • 相关阅读:
    BZOJ 2326 数学作业
    BZOJ 4448 情报传递
    BZOJ 4443 小凸玩矩阵
    BZOJ 1852 最长不下降序列
    BZOJ 4373 算术天才⑨与等差数列
    68285
    65656556
    D. Points in rectangle
    恐怖的怪物
    再战斐波那契
  • 原文地址:https://www.cnblogs.com/ivanny/p/spark_rdd_2.html
Copyright © 2011-2022 走看看