0

ストリームが時間 X に受信されたとします。バッチ期間が 1 分であるとします。現在、エグゼキュータは最初のバッチを処理しています。ただし、この実行には X+3 まで 3 分かかります。しかし、X+1 と X+2 では、他の 2 つのバッチを受け取ります。X+1 で最初のバッチが失われるということですか? それとも私の記憶に保存されていて、まだ処理中ですか?

4

1 に答える 1

1

Spark Streaming での処理中にデータが失われることはありません。Spark はすべての受信データをメモリに保存します (また、フォールト トレランスのためにそれらを他のノードにレプリケートします)。各バッチ間隔の後、executor は新しいジョブをスケジュールして、保存されたデータを処理します (マイクロバッチ)。このジョブの実行中、将来の処理のために別のデータがメモリに保存されます。

とにかくあなたの例は間違っています。Sparkのドキュメントに記載されているように

クラスターで実行されている Spark Streaming アプリケーションが安定しているためには、システムは受信と同じ速さでデータを処理できる必要があります。つまり、データのバッチは、生成されるのと同じ速さで処理する必要があります。

平たく言えば、1 分のデータ スライスを 3 分で処理する場合、長期的にはうまくいくとは期待できません。しばらくすると、着信データを保存するためのメモリ使用量が原因で、とにかくアプリが爆発します。

于 2016-11-02T20:33:40.207 に答える