Spark 现金盘彩票开奖网源码下载源码分析之ShuffleMapTask内存数据Spill和合并

  •  现金盘彩票开奖网源码下载联系方式:QQ:2747044651【征途源码论坛http://t.cn/Eyb4XkK】Spark ShuffleMapTask 内存中的数据Spill到临时文件
  • 临时文件中的数据是如何定入的,如何按partition升序排序,再按Key升序排序写入(key,value)数据
  • 每个临时文件,都存入对应的每个分区有多少个(key,value)对,有多少次流提交数组,数组中保留每次流的大小
  • 如何把临时文件合成一个文件
  • 如何把内存中的数据和临时文件,进行分区,按key,排序后,再写入合并文件中

内存中数据Spill到磁盘

  • ShuffleMapTask进行当前分区的数据读取(此时读的是HDFS的当前分区,注意还有一个reduce分区,也就是ShuffleMapTask输出文件是已经按Reduce分区处理好的)
  • SparkEnv指定默认的SortShuffleManager,getWriter()中匹配BaseShuffleHandle对象,返回SortShuffleWriter对象
  • SortShuffleWriter,用的是ExternalSorter(外部排序对象进行排序处理),会把rdd.iterator(partition, context)的数据通过iterator插入到ExternalSorter中PartitionedAppendOnlyMap对象中做为内存中的map对象数据,每插入一条(key,value)的数据后,会对当前的内存中的集合进行判断,如果满足溢出文件的条件,就会把内存中的数据写入到SpillFile文件中
  • 满中溢出文件的条件是,每插入32条数据,并且,当前集合中的数据估值大于等于5m时,进行一次判断,会通过算法验证对内存的影响,确定是否可以溢出内存中的数据到文件,如果满足就把当前内存中的所有数据写到磁盘spillFile文件中
  • SpillFile调用org.apache.spark.util.collection.ExternalSorter.SpillableIterator.spill()方法处理
  • WritablePartitionedIterator迭代对象对内存中的数据进行迭代,DiskBlockObjectWriter对象写入磁盘,写入的数据格式为(key,value),不带partition的

猜你喜欢

转载自www.cnblogs.com/lalauuuen/p/10118943.html
今日推荐