2016-08-28 11 views
7

スパークは、パラレルで操作できるフォールトトレラントな要素の集合体である復元力のある分散データセット(RDB)という概念を中心に展開されています。しかし、私は、RDDがフォールトトレランスを完了するための内部メカニズムを見つけませんでした。誰かがこのメカニズムについて説明できますか?ありがとう。スパークのRDDはフォールトトレランスをどのようにして終了しますか?

答えて

16

わかりましたら非常に簡単に説明してください。

クラスタ内のフォルトは、データを処理しているノードの1つがクラッシュしたときに発生します。言い換えれば、RDDはパーティションに分割され、各ノード(executorsと呼ばれる)はいつでもパーティション上で動作します。 (理論的には、各エグゼキュータには、ジョブに割り当てられたコアの数とRDDに存在するパーティションの数に応じて、複数のタスクを割り当てることができます)。

実際には、RDDのパーティション上で実行される一連のScala関数(機能が純粋か副作用かに応じて、Sparkの用語で変換とアクションと呼ばれます)が実行されます。これらの操作は一緒に構成され、Spark実行エンジンはこれらをオペレーションのDirected Acyclic Graphとみなします。

操作Yの操作Zの途中​​で特定のノードがクラッシュした場合、クラスタマネージャ(YARN/Mesos)はノードが停止していることを知り、別のノードを割り当てようとしますノードは処理を続行します。このノードは、アプリケーションコードから作成されたScalaクロージャを渡すことによって、実行する必要のあるRDDの特定のパーティションと一連の操作X-> Y-> Z(lineage)で動作するように指示されます。新しいノードは幸せに処理を続けることができ、データ損失は事実上ありません。

スパークでは、このメカニズムを使用してexactly-onceの処理を保証しています。スパークActionブロックのデータベースを呼び出すような副作用操作は何度も呼び出すことができます。しかし、1つのRDDから別のRDDへの純粋な機能マッピングのような変換を見ると、結果として得られるRDDはソースRDDからの要素を1回しか処理しないことが保証されます。

スパークのフォールトトレランスの領域は非常に広大であり、はるかに大きな説明が必要です。私は、他の人たちがこれがどのように実装されているかなどの技術的な詳細が出てくるのを見たいと思っています。

関連する問題