国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 服务器 > spark内核揭秘-10-RDD源码分析

spark内核揭秘-10-RDD源码分析

来源:程序员人生   发布时间:2015-02-09 08:54:06 阅读次数:3645次

RDD的核心方法:






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


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

我们就想进入HadoopRDD实现:


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

2、进入 getInputFormcat(jobConf)方法:


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


进入FileInputFormcat类的getSplits方法:




5、进入HadoopPartition:



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


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

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


我们进入ShuffleDependency类:


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


我们进入HadoopMapPartitionsWithSplitRDD的 compute方法:


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


getPreferredLocations是寻觅Partition的首选位置:


我们进入NewHadoopRDD的getPreferredLocations:



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


Partitioner的源码以下:





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

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


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生