文档章节

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

stark_summer
 stark_summer
发布于 2015/01/21 15:35
字数 393
阅读 772
收藏 1

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

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

© 著作权归作者所有

stark_summer
粉丝 61
博文 75
码字总数 51050
作品 0
朝阳
CEO
私信 提问
加载中

评论(0)

【Spark】SparkStreaming-Tasks-数量如何设置?

SparkStreaming-Tasks-数量如何设置? sparkstreaming task 数量设置百度搜索 spark内核揭秘-14-Spark性能优化的10大问题及其解决方案 - starksummer - ITeye博客 如何在执行spark streaming...

osc_5s0xzojq
2018/01/11
5
0
spark 学习路线及参考课程

一、Scala编程详解: 第1讲-Spark的前世今生 第2讲-课程介绍、特色与价值 第3讲-Scala编程详解:基础语法 第4讲-Scala编程详解:条件控制与循环 第5讲-Scala编程详解:函数入门 第6讲-Scala编...

osc_s5wa3ebb
2018/05/07
24
0
王家林大咖清华大学新书Spark第二版已上市:前浪致 Spark + AI 后浪

王家林大咖清华大学新书Spark第二版已上市:前浪 致 Spark + AI 后浪 大咖心声 新书图片 新书介绍 编辑推荐 内容简介 作者简介 新书目录 第二版前言 第一版前言 新书案例讲解 第二版网购链接...

段智华
今天
0
0
2018年新春报喜!热烈祝贺王家林大咖大数据经典传奇著作《SPARK大数据商业实战三部曲》 畅销书籍 清华大学出版社发行上市!

2018年新春报喜!热烈祝贺王家林大咖大数据经典传奇著作《SPARK大数据商业实战三部曲》畅销书籍 清华大学出版社发行上市! 本书基于Spark 2.2.0新版本,以Spark商业案例实战和Spark在生产环境...

段智华
03/31
0
0
【Spark】Spark-空RDD判断与处理

Spark-空RDD判断与处理 SparkKafkaDemo - Streaming Statistics rdd isempty count百度搜索 Spark RDD.isEmpty costs much time - Stack Overflow Spark Streaming中空RDD的处理-Spark-abou......

osc_qvqynsub
2018/01/11
2
0

没有更多内容

加载失败,请刷新页面

加载更多

QT 执行shell命令

(1)首先包含头文件: #include <QProcess> (2)执行shell命令: QProcess::execute("ls");

悲催的古灵武士
26分钟前
22
0
osgEarth使用笔记3——加载倾斜摄影数据

目录 1. 概述 2. 详论 2.1. 位置 2.2. 着色 2.3. 其他 3. 结果 4. 参考 1. 概述 我在《OSG加载倾斜摄影数据》这篇博文中论述了如何通过OSG生成一个整体的索引文件,通过这个索引文件来正确显...

osc_7oc4d1en
27分钟前
19
0
cesium加载gltf模型点击以及列表点击定位弹窗

前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材。 之前有部分订阅者咨询我,...

osc_cx8uhydz
28分钟前
14
0
思维导图软件如何插入图片?具体步骤?

学习思维导图制作的过程中,会遇到很多没有学过的知识,需要我们不断地去改进和学习,这样增强自己的学习能力,才能更好地掌握制图软件。以后帮助我们快速方便地完成制图,今天我们就要来看看...

深蓝月上
28分钟前
25
0
Notepad++ 列块模式编辑,替换换行符

一、列块模式编辑: 1、数据准备 2、按住 “Alt + 鼠标左键” 选择需要列块模式编辑的区域,可以看到多了一条竖线 3、之后批量可以添加,修改内容 二、替换换行符 上面说了列块模式的编辑,后...

osc_itgved4p
29分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部