zoukankan      html  css  js  c++  java
  • spark内核揭秘-10-RDD源码分析

    RDD的核心方法:






    首先看一下getPartitions方法的源码:


    getPartitions返回的是一系列partitions的集合,即一个Partition类型的数组

    我们就想进入HadoopRDD实现:


    1、getJobConf():用来获取job Configuration,获取配置方式有clone和非clone方式,但是clone方式 是not thread-safe,默认是禁止的,非clone方式可以从cache中获取,如cache中没有那就创建一个新的,然后再放到cache中

    2、进入 getInputFormcat(jobConf)方法:


    3、进入inputFormat.getSplits(jobConf, minPartitions)方法:


    进入FileInputFormcat类的getSplits方法:




    5、进入HadoopPartition:



    而getDependencies表达是RDD之间的依赖关系,如下所示:


    getDependencies返回的是依赖关系的一个Seq集合,里面的Dependency数组中的下划线是类型的PlaceHolder

    我们进入ShuffledRDD类中的getDependencies方法:


    我们进入ShuffleDependency类:


    每个RDD都会具有计算的函数,如下所示:


    我们进入HadoopMapPartitionsWithSplitRDD的 compute方法:


    Compute方法是针对RDD的每个Partition进行计算的,其TaskContext参数的源码如下:


    getPreferredLocations是寻找Partition的首选位置:


    我们进入NewHadoopRDD的getPreferredLocations:



    其实RDD还有一个可选的分区策略:


    Partitioner的源码如下:





    可以看出默认使用的是HashPartitioner,要注意key为Array的情况;

    spark.default.parallelism必须要设置,否则会根据partitions数据来传输RDD,这样也会很容易出现OOM


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Plahte
    Sound 静音问题
    【模板】线段树 2
    winform GDI基础(四)简单截屏
    winform GDI基础(二)画带圆角的矩形框
    winform GDI基础(三)实现画笔
    winform GDI基础(一)
    winform播放视频(windows media player)
    c# 锁的使用
    C#Task学习
  • 原文地址:https://www.cnblogs.com/stark-summer/p/4829811.html
Copyright © 2011-2022 走看看