RDD 可视化 —— RDDOperationScope.withScope
最近在看各种博客,学习 spark 源代码。
网上对源代码的分析基本都是基于 0.7, 0.8, 1.0 的代码,而现在的发行版已经是 1.5 了。所以有些代码不大对的上。比如函数 RDD.map()
旧版本是:
def mapU: ClassTag: RDD[U] = new MappedRDD(this, sc.clean(f))
1.5 版本是:
def map[U: ClassTag](f: T => U): RDD[U] = withScope {
val cleanF = sc.clean(f)
new MapPartitionsRDD[U, T](this, (context, pid, iter) => iter.map(cleanF))
}
而且所有 RDD 的转化方法都调用了 RDDOperationScope.withScope,于是我就很好奇这个函数有什么作用。
它首先是根据堆栈信息(Thread.currentThread.getStackTrace)找出调用者的名字,比如 map, textFile, reduceByKey 等等,然后在 SparkContext 的属性 "spark.rdd.scope" 中新建了一个属性 RDDOperationScope(name: String, parent: RDDOperationScope),用来记录当前的运行 RDD 信息。其中 parent 可以用来追溯到所有 RDD 操作信息,即 RDDOperationScope。
这又啥用?于是我 git blame 了一下,找到了代码的提交哈希值为 fc8b5819,再 git show,于是有了详细的介绍,第一行是
[SPARK-] [SPARK-] DAG visualization on SparkUI
原来是用来做 DAG 的可视化。再找到这个 SPARK-6943,有非常详细的动机描述:现有的 Spark UI 中只有 stage 的执行情况,而 stage 与用户代码中 rdd 的联系不够直接,如果代码复杂,很难根据 UI 信息了解到代码的执行情况,于是想强化 UI 中的 RDD 可视化功能,所以把所有创建 RDD 的方法包裹起来,使用 RDDOperationScope 记录 RDD 的操作历史和关联,就能达成目标。
RDD 可视化 —— RDDOperationScope.withScope的更多相关文章
- scala语法在spark withScope上的应用
withSpout在spark中是用来做DAG可视化的,它在代码里的用法如下(以map为例,spark 2.0.0版本) def map[U: ClassTag](f: T => U): RDD ...
- RDD概念、特性、缓存策略与容错
一.RDD概念与特性 1. RDD的概念 RDD(Resilient Distributed Dataset),是指弹性分布式数据集.数据集:Spark中的编程是基于RDD的,将原始数据加载到内存变成 ...
- Spark RDD Action 简单用例(二)
foreach(f: T => Unit) 对RDD的所有元素应用f函数进行处理,f无返回值./** * Applies a function f to all elements of this ...
- Spark RDD 算子总结
Spark算子总结 算子分类 Transformation(转换) 转换算子 含义 map(func) 返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成 filter(func) ...
- RDD.scala(源码)
---- map. --- flatMap.fliter.distinct.repartition.coalesce.sample.randomSplit.randomSampleWithRange. ...
- 【原创】大数据基础之Spark(7)spark读取文件split过程(即RDD分区数量)
spark 2.1.1 spark初始化rdd的时候,需要读取文件,通常是hdfs文件,在读文件的时候可以指定最小partition数量,这里只是建议的数量,实际可能比这个要大(比如文件特别多或者特别 ...
- 【原创】大数据基础之Spark(6)Spark Rdd Sort实现原理
spark 2.1.1 spark中可以通过RDD.sortBy来对分布式数据进行排序,具体是如何实现的?来看代码: org.apache.spark.rdd.RDD /** * Return thi ...
- Spark RDD深度解析-RDD计算流程
Spark RDD深度解析-RDD计算流程 摘要 RDD(Resilient Distributed Datasets)是Spark的核心数据结构,所有数据计算操作均基于该结构进行,包括Spark ...
- 通过WordCount解析Spark RDD内部源码机制
一.Spark WordCount动手实践 我们通过Spark WordCount动手实践,编写单词计数代码:在wordcount.scala的基础上,从数据流动的视角深入分析Spark RDD的数据 ...
随机推荐
- Apache Shiro安全(权限框架)学习笔记二
课程目标 通过学习本课程掌握权限管理的设计思想及方法,使用Shiro框架完成权限管理功能开发. 1. 理解基于资源的权限管理方法. 2. 掌握权限管理的数据模型. 3. 掌握不使用shiro开发 ...
- nginx 加工上游服务器返回的内容,并返回给客户端
禁用上游响应头部功能 Syntax: proxy_ignore_headers field ...; Default: — Context: http, server, location 功能介绍:某 ...
- Django中defer和only区别
defer('id', 'name'):取出对象,字段除了id和name都有 only('id', 'name'):取出对象, 只有id和name ret=models.Author.objects. ...
- IntelliJ IDEA常用快捷键大全
如果想要非常高效的使用IDEA这款工具,应该掌握图中已被标记的快捷键. 另: 代码实时模板生成:psvm/sout/ifn等 按Tab键快速生成模板. 转载请保留或注明出处:http://www.cn ...
- JS 数组相关
数组 function SelectLoadTable() { var mids = $("#mids").val(); var halls = $("#halls&qu ...
- Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)
原文:http://blog.csdn.net/liuyiming_/article/details/7704923 SharedPreferences介绍: SharedPreferences是An ...
- VMware 设置共享文件夹
1. 打开: 虚拟机 -> 设置 -> 选项 2. 选择 “总是启用” ,然后点 “添加” 选择你要共享的本地文件夹,最后点确定. 3. Linux下在 /mnt/hgfs 文件夹下就可以 ...
- windows 创建软连接
mklink /d D:\www\child.ivyoffline\common\components\policy D:\www\child.ivyoffline\appOA\protected\c ...
- 笔记||Pyhthon3进阶之多线程操作共享数据
# 多线程操作共享数据--------------------------------------------------------------- # import threading# 使用锁# ...
- mysql 获取刚插入行id汇总
mysql 获取刚插入行id汇总 我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的.但 ...