RDD可視化-RDDOperationScope.withScope

1372 ワード

最近いろいろなブログを見て、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」に、現在の実行RDD情報を記録するための属性RDDOperationScope(name:String,parent:RDDOperationScope)を新規作成します.ここでparentは、すべてのRDD動作情報、すなわちRDDOperationScopeに遡るために使用することができる.
何の用だ?そこでgit blameを見て、コードのコミットハッシュ値がfc 8 b 5819であることを見つけて、git showをして、そこで詳しい紹介があって、第1行は
[SPARK-6943] [SPARK-6944] DAG visualization on SparkUI

もともとDAGの可視化に使われていました.このSPARK-6943を見つけると、非常に詳細な動機が説明されています.既存のSpark UIではstageの実行状況しかありませんが、stageとユーザーコードのrddとのつながりが直接的ではありません.コードが複雑であれば、UI情報に基づいてコードの実行状況を知ることが難しいので、UIのRDDの可視化機能を強化したいので、RDDを作成する方法をすべて包んで、RDDOperationScopeを使用してRDDの操作履歴と関連付けを記録すると、目標を達成できます.