spark内核揭秘-10-RDD源码分析
spark内核揭秘-10-RDD源码分析
stark_summer 发表于3年前
spark内核揭秘-10-RDD源码分析
  • 发表于 3年前
  • 阅读 340
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: ** * A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable, * partitioned collection of elements that can be operated on in parallel. This class contains the * basic operations available on all RDDs, such as `map`, `filter`, and `persist`. In addition, ...

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

共有 人打赏支持
粉丝 60
博文 75
码字总数 51050
×
stark_summer
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: