RDD 可视化 —— RDDOperationScope.withScope
最近在看各種博客,學(xué)習(xí) spark 源代碼。
網(wǎng)上對源代碼的分析基本都是基于 0.7, 0.8, 1.0 的代碼,而現(xiàn)在的發(fā)行版已經(jīng)是 1.5 了。所以有些代碼不大對的上。比如函數(shù) 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 的轉(zhuǎn)化方法都調(diào)用了 RDDOperationScope.withScope,于是我就很好奇這個函數(shù)有什么作用。
它首先是根據(jù)堆棧信息(Thread.currentThread.getStackTrace)找出調(diào)用者的名字,比如 map, textFile, reduceByKey 等等,然后在 SparkContext 的屬性 "spark.rdd.scope" 中新建了一個屬性 RDDOperationScope(name: String, parent: RDDOperationScope),用來記錄當(dāng)前的運行 RDD 信息。其中 parent 可以用來追溯到所有 RDD 操作信息,即 RDDOperationScope。
這又啥用?于是我 git blame 了一下,找到了代碼的提交哈希值為 fc8b5819,再 git show,于是有了詳細的介紹,第一行是
[SPARK-] [SPARK-] DAG visualization on SparkUI
原來是用來做 DAG 的可視化。再找到這個 SPARK-6943,有非常詳細的動機描述:現(xiàn)有的 Spark UI 中只有 stage 的執(zhí)行情況,而 stage 與用戶代碼中 rdd 的聯(lián)系不夠直接,如果代碼復(fù)雜,很難根據(jù) UI 信息了解到代碼的執(zhí)行情況,于是想強化 UI 中的 RDD 可視化功能,所以把所有創(chuàng)建 RDD 的方法包裹起來,使用 RDDOperationScope 記錄 RDD 的操作歷史和關(guān)聯(lián),就能達成目標。
總結(jié)
以上是生活随笔為你收集整理的RDD 可视化 —— RDDOperationScope.withScope的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java第六章工具包6.1P6-01.C
- 下一篇: java瑞格实验2;2020.4.3