web-dev-qa-db-ja.com

Lineage In Sparkとは何ですか?

系統はデータの再計算にどのように役立ちますか?

たとえば、複数のノードがそれぞれ30分間データを計算しています。 15分後に失敗した場合、15分を再度与えることなく、系統を使用して15分で処理されたデータを再計算できますか?

6
Gaurav Dubey

系統について理解することはすべて、RDDの定義にあります。

それでは、それを確認しましょう:

RDDは、データの要素の不変の分散コレクションであり、マシンのクラスター全体でメモリまたはディスクに格納できます。データは、変換とアクションを提供する低レベルAPIと並行して操作できるクラスター内のマシン間で分割されます。 RDDは、データ系統情報を追跡して、障害時に失われたデータを自動的に再構築するため、フォールトトレラントです

したがって、主に理解すべき2つのことがあります。

残念ながら、これらのトピックは1つの答えで議論するのに非常に長いです。 Data Lineage に関する次の記事と一緒に読んでみることをお勧めします。

そして今、あなたの質問と疑問に答えるために:

エグゼキュータがデータの計算に失敗した場合、15分後、ソースからのものであるかどうかに関係なく、最後のチェックポイントに戻ります。またはキャッシュメモリおよび/またはディスク。

したがって、あなたが言及した15分は節約できません!

14
eliasah

変換(マップまたはフィルターなど)が呼び出されると、Sparkによってすぐに実行されるのではなく、変換ごとに系統が作成されます。系統は、すべての変換が何である必要があるかを追跡します。データを読み取らなければならない場所を含め、そのRDDに適用されます。

たとえば、次の例について考えてみます。

val myRdd = sc.textFile("spam.txt")
val filteredRdd = myRdd.filter(line => line.contains("wonder"))
filteredRdd.count()

sc.textFile()とmyRdd.filter()はすぐには実行されず、RDDでアクションが呼び出されたときにのみ実行されます(ここではfilteredRdd.count())。

アクションは、結果を特定の場所に保存するか、表示するために使用されます。 RDD系統情報は、コマンドfilteredRdd.toDebugString(ここではfilteredRddはRDDです)を使用して印刷することもできます。また、DAG Visualizationは、次のように非常に直感的な方法で完全グラフを表示します。 enter image description here

1
KayV

Sparkでは、LineageGraphは既存のRDDと新しいRDDの間の依存関係グラフです。これは、RDD間のすべての依存関係が、元のデータではなくグラフに記録されることを意味します。

出典: リネージュグラフとは

0
Spandana r