Spark Checkpoint读操作代码分析

来源:互联网 发布:怎么安装spss13软件 编辑:程序博客网 时间:2024/05/18 02:59
 《Spark RDD缓存代码分析》
  《Spark Task序列化代码分析》
  《Spark分区器HashPartitioner和RangePartitioner代码详解》
  《Spark Checkpoint读操作代码分析》
  《Spark Checkpoint写操作代码分析》

  上次介绍了RDD的Checkpint写过程(《Spark Checkpoint写操作代码分析》),本文将介绍RDD如何读取已经Checkpint的数据。在RDD Checkpint完之后,Checkpint的信息(比如数据存放的目录)都由RDDCheckpointData去管理,所以当下次计算依赖了这个RDD的时候,首先是根据依赖关系判断出当前这个RDD是否被Checkpint了,主要是通过RDD的dependencies决定:

finaldef dependencies:Seq[Dependency[_]]={
  checkpointRDD.map(r=> List(newOneToOneDependency(r))).getOrElse {
    if(dependencies_== null) {
      dependencies_= getDependencies
    }
    dependencies_
  }
}

  如果RDD被Checkpint了,那么checkpointRDD为Some(CheckpointRDD[T])了,所以依赖的RDD变成了CheckpointRDD。在计算数据的过程中会调用RDD的iterator方法:

finaldef iterator(split:Partition, context:TaskContext):Iterator[T] ={
  if(storageLevel !=StorageLevel.NONE) {
    <spanclass="wp_keywordlink_affiliate"><a href="http://www.iteblog.com/archives/tag/spark"title=""target="_blank"data-original-title="View all posts in Spark">Spark</a></span>Env.get.cacheManager.getOrCompute(this, split, context, storageLevel)
  }else{
    computeOrReadCheckpoint(split, context)
  }
}
 
private[spark]defcomputeOrReadCheckpoint(split:Partition, context:TaskContext):Iterator[T] =
{
   if(isCheckpointed) firstParent[T].iterator(split, context) elsecompute(split, context)
}

  计算的过程中首先会判断RDD是否被Checkpint了,而RDD Checkpint写之后这个条件肯定是true的。而firstParent已经变成了CheckpointRDD,所以会调用CheckpointRDD的iterator方法, 该方法最终会调用ReliableCheckpointRDD的compute方法:

overridedef compute(split:Partition, context:TaskContext):Iterator[T] ={
  valfile =new Path(checkpointPath, ReliableCheckpointRDD.checkpointFileName(split.index))
  ReliableCheckpointRDD.readCheckpointFile(file, broadcastedConf, context)
}

  在compute方法中会通过ReliableCheckpointRDD的readCheckpointFile方法来从file路径里面读出已经Checkpint的数据,readCheckpointFile的实现如下:

defreadCheckpointFile[T](
    path:Path,
    broadcastedConf:Broadcast[SerializableConfiguration],
    context:TaskContext):Iterator[T] ={
  valenv =<spanclass="wp_keywordlink_affiliate"><a href="http://www.iteblog.com/archives/tag/spark"title=""target="_blank"data-original-title="View all posts in Spark">Spark</a></span>Env.get
  valfs =path.getFileSystem(broadcastedConf.value.value)
  valbufferSize =env.conf.getInt("spark.buffer.size",65536)
  valfileInputStream =fs.open(path, bufferSize)
  valserializer =env.serializer.newInstance()
  valdeserializeStream =serializer.deserializeStream(fileInputStream)
 
  // Register an on-task-completion callback to close the input stream.
  context.addTaskCompletionListener(context=> deserializeStream.close())
 
  deserializeStream.asIterator.asInstanceOf[Iterator[T]]
}

最后数据就回被全部读取出来,整个Checkpint读过程完成了。


 转载自过往记忆(http://www.iteblog.com/)
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑开机时不显示用户名怎么办? xp系统忘记开机密码怎么办 电脑开机密码忘了怎么办 c盘满了怎么办win10 win10电脑开机密码忘了怎么办 win10的开机密码忘了怎么办 u盘中了exe病毒怎么办 眼睛长个麦粒豆怎么办 苹果手机sdk授权失败怎么办 小米5王者荣耀卡怎么办 华为p9手机电池不耐用怎么办 华为g9青春版耗电快怎么办 华为手机摄像头坏了怎么办 华为p10摄像头玻璃划痕怎么办? 华为g9手机音量小怎么办 华为7pius太卡怎么办 华为畅享7plus卡怎么办 华为p9屏幕进水变颜色怎么办? 玩王者荣耀卡退怎么办 华为手机忘记开机密码怎么办 华为p9密码忘了怎么办 华为p9解锁密码忘了怎么办 华为手机不支持联通4g怎么办 酷派手机自动下载软件怎么办 小米5a不能开机怎么办 华为手机的视频找不到了怎么办 华为p8内存文件打不开怎么办 华为荣耀9网速慢怎么办 荣耀9手机网速慢怎么办 联想台式机不支持xp驱动怎么办 一体机尾插坏了怎么办 华为手机触屏失灵怎么办 华为p8max手机老是卡怎么办 手机屏碎了数据怎么办 华为p9屏碎了怎么办 华为p7一l09卡顿怎么办 华为p7打不开机怎么办 华为8主板坏了怎么办 华为手机主板坏了怎么办 华为p9文字变英文了怎么办 华为p9plus电池不耐用怎么办