スパークストリーミングフォールトトレランス、フォールトトレラント3ヶ所が含まれています。
1は、エグゼキュータは、フォールトトレラントの失敗:失敗の執行は、新たな執行を再開しますが、これは、Sparkの独自の特徴です。エグゼキュータレシーバが存在失敗した場合は、ストリーミングがReceiver別のエグゼキュータに(これはエグゼキュータのバックアップに受信されたデータを存在していてもよい)を開始しますスパーク
2、ドライバはFTを失敗しました:ドライバーが失敗した場合、全体のスパークストリーミング・アプリケーションは、すべてのハングします。だから、ドライバー側の耐障害性が非常に重要であり、我々は最初の正規省ドライバ側の状態のチェックポイントドライバー端子を構成することができます。そして我々は、自動的に(各クラスタの管理構成は同じではありません)メカニズムドライバー側の障害を再起動するように設定することができます。最後に、我々はWAL機構エグゼキュータの終わりを開く必要があります
タスクのスパークを再度実行することができなかった、それが失敗した場合、このタスクは、ステージ、我々はその後、RDDの依存関係に応じて再実行ステージ父のステージもあり、再実行できなかったステージ:3、タスクがFTに失敗しましたリアルタイムシステムのプロセスに、そして確かに、このタスクタスクの実行時間が長すぎる時間のためにストリーミングスパーク殺す他のより適切な資源のエグゼキュータに長すぎる再実行されますされ、タスクの実行時間を容認することはできません。推定されるメカニズムは、タスクのスケジューリングスパークの使用です。
エグゼキュータ障害フォールトトレランス
ドライバーは、フォールトトレラント失敗しました
チェックポイントのメカニズム:定期的にHDFSにドライバー側の情報を書き込み、
図1に示すように、コンフィギュレーション(設定情報)
2、DSTREAM定義された操作
情報の3、未完のバッチ
1、自動再起動ドライバプログラム
スタンドアロン、糸とmesosサポート
2は、チェックポイントディレクトリHDFSを設定しました
streamingContext.setCheckpoint(hdfsDirectory)
図3は、フォールトトレラントドライバーを達成するためのドライバ側で正しいAPIを使用して、あなたは、コードを記述する必要があります
org.apache.spark.storage.StorageLevelインポート インポートorg.apache.spark.streaming。{秒急速、StreamingContext} インポートorg.apache.spark。{SparkConf、SparkContext} / ** * WORDCOUNTプログラムは、消費者のTCPストリーミングサーバスパーク送ってくれましたリアルタイムデータの例は: * * 1マスターサーバー上でNetcatをサーバーを起動します * `$ NC -lk 9998`(NCコマンドがない場合、我々は-y NC NCとyumをインストールインストールすることができます) * で、2 *クラスタ内のスパークストリーミングアプリケーションにアップ実行中に、次のコマンド *火花提出--class com.twq.wordcount.JavaNetworkWordCount \ //マスター:スパーク--master * 7077 \ * --deploy MODE-クラスタ\ * -メモリ512M -ドライバ\ *メモリ--executor-512M \ * --total-エグゼ4コア\。 * --executor-2コア\ /Home/hadoop-twq/spark-course/streaming/spark-streaming-basic-1.0-SNAPSHOT.jar * * / オブジェクトNetworkWordCount { DEFメイン(引数:配列[文字列]){ ヴァルcheckpointDirectory =「HDFS://マスター:9999 /ユーザー/ Hadoopの-twq /火花コースは/ストリーミング/ chechpoint " DEF functionToCreateContext():= {StreamingContext ヴァルsparkConfは、新たな新sparkConf =() .setAppName(" NetworkWordCount「) ヴァルSC =新新SparkContext(sparkConf) //作成します。コンテキストを有する第二1サイズBATCH ヴァルSSC =新しい新しいStreamingContext(SC、秒(1)) //シンク(ReceiverInputDStream)を作成するデータは、受信機は、マシン上のソケットによってポートを介して送信を受信しプロセス ヴァルラインは= ssc.socketTextStream(「マスター」 、9998、StorageLevel.MEMORY_AND_DISK_SER_2は)// データ・ブロック、2つのバックアップの可用性を増大させるが、いくつかのメモリ取り上げる 単にワード数行われる論理//処理を ヴァルワードをlines.flatMap =(_。スプリット( "")) ヴァルwordcounts = words.map(X =>(X ,. 1))。reduceByKey(_ _ +) //コンソールに出力する (wordCounts.print) SSC .checkpoint(checkpointDirectory) SSC } //コード ヴァルSSC = StreamingContext.getOrCreate(checkpointDirectory、functionToCreateContext _)は、 処理フローストリーミングを開始// ()ssc.startを //プログラム終了ストリーミング待つ ssc.awaitTerminationを() } }
設定された自動再起動ドライバプログラム
スタンドアロン:
火花提出し、次の二つのパラメータに増やします。
--deployモードクラスタ
--supervise
糸:
次のパラメータを火花提出増やします。
--deployモードクラスタ
糸yarn.resourcemanager.am.max-attemps構成で配置されました
ヶ月:
マラソンは、アプリケーションMesosを再起動することができます
受信したデータ損失のフォールトトレランス
チェックポイントのメカニズム:定期DSTREAM DAG情報ドライバ側は、HDFS(メモリの書き込みと同時に、ディスクへの書き込み)で書かれました
WALは、構成データを復元するために使用します
1.設定したチェックポイントディレクトリHDFS
streamingContext.setCheckpoint(hdfsDirectory)
2、開いた構成WAL
sparkConf.set(「spark.streaming.receiver.writeAheadLog.enable」、「真」)
3、レシーバはで信頼できるものでなければなりません
データがWAL終了すると、唯一のデータソースは、消費者に語っています
言わなかったために、データソースのデータは、データソースからデータを消費直すことができます
4、キャンセルメモリ内のデータのバックアップ
StorageLevel.MEMORY_AND_DISK_SERデータソースを保存するために使用し、ディスク、他のエグゼキュータのメモリをバックアップする必要はありません、それにより、省スペースに書き込まれています
受信したデータを他のエグゼキュータにバックアップまたはHDFSに保存されて、何の領収書は、例えば、再消費データは、領収書を送信しませんでしたし、その後、そのデータが失われないことを確認するために送信されていないと仮定すると、データソースに領収書を送信しますされているかどうか:カフカを
信頼性の高い受信機:
データを受信した後、バックアップ・ストレージを有しており、そのデータソースに領収書を送信します
信頼できない受信機:
これは、データソースに確認応答を送信しません
タスクは非常に遅いフォールトトレラントである場合には