2016-09-27 12 views

答えて

1

あなたが参照しているコードは、Broadcast.unpersist()メソッドを使用しています。 Spark API Broadcast.unpersist()の方法をチェックすると、「エグゼキュータでこのブロードキャストのキャッシュされたコピーを非同期で削除します。ブロードキャストが呼び出された後に使用される場合は、各エグゼキュータに再送信する必要があります。 unpersist(ブーリアンブロッキング)メソッドがオーバーロードされています。このメソッドは、unpersistingが完了するまでブロックします。したがって、あなたのSparkアプリケーションでブロードキャスト変数をどのように使用しているかによって異なります。 sparkでは、ブロードキャスト変数を変更すると自動再ブロードキャストはありません。ドライバはそれを再送する必要があります。 Sparkのドキュメントによれば、エグゼキュータ・ノードでの処理の不一致を避けるために、ブロードキャスト変数(Immutable)を変更しないでください。ただし、ブロードキャスト変数のライフ・サイクルを制御する場合は、unpersist()メソッドとdestroyスパークジラを参照してくださいhttps://issues.apache.org/jira/browse/SPARK-6404

+0

ありがとうございます。私のユースケースは、リモートサーバからいくつかのKey-Valueデータをダウンロードし、ハッシュマップとして保存し、ローカルルックアップのためにすべてのエグゼキュータにそれを送信/ブロードキャストすることです。その後、2分後に新しいデータがある場合はリモートサーバーにチェックし、取得したら取得し、ハッシュマップに追加し、NEWデータでローカルルックアップを行うすべてのエグゼキュータに送信/ブロードキャストします。私は2つのブロードキャスト変数を使ってこれを達成できると思います。 – sunillp

+0

最初のデータを含むbroadcast_var1がブロードキャストされます。その後、データ変更時に、新しいデータを含むbroadcast_var2がブロードキャストされ、broadcast_var1は固定されません(ブロッキング=真)。以前に "broadcast_var1"を使用していたエグゼキュータは、例外を取得し、そのスイッチに基づいて "broadcast_var2"になります。次回は、データの変更についても同じことが繰り返されますが、2つのブロードキャスト変数の役割が変更されます。あなたはこれが可能である/有効であると思いますか? – sunillp

+1

ブロードキャスト変数は、大きなデータをエグゼキュータに1回送信するために使用する必要があります。頻繁ではありません。 2分ごとにunpersist(blocking = true)を呼び出すと、ストリーム処理のパフォーマンスが低下します。また、ブロードキャスト変数の値にあるロジックにも依存します。 Key-Valueデータの量あなたはクロージャーの中に置くことができないので、エグゼキュータにシリアライズできますか? – abaghel

関連する問題