A.詳細なフォールトトレランスとトランザクションセマンティクス
フォールトトレランスの背景(1)
スパークストリーミング、フォールトトレラントセマンティクスの最初のリコールスパークRDDの基礎が提供するフォールトトレランスを理解するために:
図1は、RDD、Ressilient分散データセットは、決意は、分散データ・セットを再計算することができる、不変です。各RDDはよく決定親族コンピューティング操作を記憶し、(ヴァル線= sc.textFile(HDFSのファイル);ヴァルワードが= lines.flatMap();ヴァル対= words.map();ヴァルwordCounts =ペア。 reduceByKey())これらのアプリケーションは、フォールトトレラントRDDは、データセットを作成し、最大で動作します。
パーティションデータRDDもたらすが失われ、一方はワーカーノードが失敗した場合(プロセスは、内部エラーの処理を終了し、ハングアップ)ので2は、そのパーティションを再計算するために、血液を操作元のフォールト・トレラント・データ・アプリケーションに設定することができますアウト。
図3は、RDDの変換操作のすべてが決定され、最後のアウトRDDデータを変換するために、確かにあるため、クラスタスパークや紛失の失敗することはありません。
データのスパークフォールトトレラント動作は、HDFSなどのファイルシステムに典型的です。したがって、フォールトトレラントRDDによって生成されたデータの全ては、フォールトトレラントです。ほとんどの場合、データは(FILESTREAMデータソースを除く)は、ネットワークを介して受信されるので、スパークストリーミングのために、それは、動作しませんでした。スパークは、ストリーミング番組、生成されたすべてのRDDは、RDDは通常のプログラム、同じフォールトトレランスをスパーク達している、受信したデータは、ノードのメモリキュータワーカー複数にコピーする必要があり、デフォルトの複製因子が2であるしましょう。
上記の理論に基づいて、故障が発生した場合に、復元する必要のあるデータの2種類があります。
1は、データを受信したとコピーされている-このデータをノード労働者がハングアップするとき、理由は他のワーカーノードで、生き残るだけでなく、そのコピーを継続することができます。
2は、データが受信されていますが、複製されるのを待って、キャッシュである-データのないコピーが存在しないため、その唯一の方法は、ソースからデータを取得することで復元します。
さらに、2つの障害があり、我々は考慮する必要があるということです。
1、障害ワーカーノード-のいずれかのワーカーノードの実行キュータは、そのノード上のメモリ内のすべてのデータが失われる原因になりますハング。ワーカーノード上でエグゼキュータが実行する受信機ならば、キャッシュ、データがコピーされるように、失われます。
2は、ドライバは、ノードを失敗しました-ノードスパークストリーミングドライバを使用すると、アプリケーションが失敗した実行すると、明らかにSparkContextが失われます、その後、アプリケーション実行用データのすべてを失いました。
(2)スパークストリーミングフォールトトレラントセマンティクスが定義されました
フォールト・トレラント・コンピューティング・システム・セマンティクスフローは、時間記録の通常数は、測定するために処理することができます。提供することができます意味論の3つのタイプがあります。
1は、最も一度:各レコードを一度に処理することができ、または処理されません。データの損失があるかもしれません。
2、少なくとも一度:それはデータ損失ゼロを保証しているため、各レコードを1回以上処理されます、この時間は、ほとんどのよりセマンティックことができます。しかし、それは記録処理が数回繰り返される可能性があります。
図3は、一度だけ: -データが失われることはありませんし、何のデータが複数回処理されません各レコードは一度だけ処理されます。これは、フォールトトレラントのセマンティクスの最強です。
スパークストリーミングでは、データの処理には3つのステップがあります。
図1に示すように、受信したデータ:受信機または他の手段は、データを受信するために使用されます。
図2に示すように、データは、計算値:DSTREAMが算出される変換データとプロセスの操作を使用して。
3、データをプッシュ:最後に計算されたデータは、などのファイル・システム、データベース、として、外部システムにプッシュ
アプリケーションは、かつて存在を必要とし、唯一のセマンティクスたら、上記の3つのステップが一度だけのセマンティクス一度提供するために必要とされている場合。各データの保証は唯一、一度だけワンプッシュをカウントすることが、一度受けていました。これらの手順では、固体スパークストリーミングセマンティクスは次のとおりです。
1、受信したデータ:異なるセキュリティセマンティクスを提供するために、さまざまなデータソース。
2は、計算されたデータ:受信すべてのデータは保証セマンティックRDDの基礎に基づいており、一度だけカウントされなければなりません。障害が発生した場合でも、限り受信したデータにアクセスできるよう、最後に計算されたデータは同じでなければなりません。
3.プッシュデータ:出力動作のデフォルトは確保するため、セマンティクスの少なくとも一つそれは出力動作における支持体の種類、及び(例えば、トランザクション・サポート、などがあるかどうかなど)、基礎となるシステムの意味論に依存して、ユーザは確実にするために、独自の業務メカニズムを実装することができるので一度だけのセマンティクス一回。
フォールト・トレラント・セマンティクス(3)受信データ
図1は、データ・ソース・ファイルに基づいて、
そのようなHDFSなどのフォールトトレラントファイルシステム内のすべての入力データであれば、スパークストリーミング障害、およびすべてのデータの処理から回復することができるであろう。意味は、すべてのデータを一度だけ処理されることを意味したら、これは一度だけ提供します。
データ・ソース・レシーバに基づく2、
耐障害性に基づいて、データソースのための受信機は、セマンティックシーンや受信機の故障の種類に依存しています。
信頼性の高い受信機:
これは、データを受信した後、受信機になり、データがコピーされ、データ・ソースは、確認動作を行います。データをコピーする前に、受信側が受信して完了している場合、それは、データ・キャッシュのデータソースは、レシーバが再起動後に、データソースがデータを再送信する際に、何もデータが失われることはありません、この時点で確認を受信しません、失敗しただろう。
信頼できない受信機:
ワーカードライバまたはノードの障害は、データの損失を引き起こす可能性がある場合は、このレシーバは、動作を確認するために送信され、そうされていません。
不同的Receiver,提供了不同的语义。如果Worker节点失败了,那么使用的是可靠的Receiver的话,没有数据会丢失。使用的是不可靠的Receiver的话,接收到,但是还没复制的数据,可能会丢失。如果Driver节点失败的话,所有过去接收到的,和复制过缓存在内存中的数据,全部会丢失。
要避免这种过去接收的所有数据都丢失的问题,Spark从1.2版本开始,引入了预写日志机制,可以将Receiver接收到的数据保存到容错存储中。如果使用可靠的Receiver,并且还开启了预写日志机制,那么可以保证数据零丢失。这种情况下,会提供至少一次的保障。(Kafka是可以实现可靠Receiver的)
从Spark 1.3版本开始,引入了新的Kafka Direct API,可以保证,所有从Kafka接收到的数据,都是一次且仅一次。基于该语义保障,如果自己再实现一次且仅一次语义的output操作,那么就可以获得整个Spark Streaming应用程序的一次且仅一次的语义。
二.架构原理深度剖析
三.数据接收原理剖析
四.数据处理原理剖析