RDD 可視化 —— RDDOperationScope.withScope

來源:互聯網
上載者:User

標籤:

最近在看各種部落格,學習 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-6943] [SPARK-6944] DAG visualization on SparkUI

原來是用來做 DAG 的可視化。再找到這個 SPARK-6943,有非常詳細的動機描述:現有的 Spark UI 中只有 stage 的執行情況,而 stage 與使用者代碼中 rdd 的聯絡不夠直接,如果代碼複雜,很難根據 UI 資訊瞭解到代碼的執行情況,於是想強化 UI 中的 RDD 可視化功能,所以把所有建立 RDD 的方法包裹起來,使用 RDDOperationScope 記錄 RDD 的操作曆史和關聯,就能達成目標。

RDD 可視化 —— RDDOperationScope.withScope

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.