2017-01-29 6 views
2

私は(SparkListenerなどから派生した)CustomListenerを書いていますが、それはうまく動作し、指標を傍受することができます。 質問は、リスナー自体の中でDataFramesを使用することです。これは、同じSpark Contextの使用を前提としていますが、2.1.xではJVMあたり1つのコンテキストしか使用しないためです。SparkListenerでDataFramesを使用するには?

jsonでいくつかのメトリックをディスクに書きたいとします。 ApplicationEndで行うことはできません。最後のjobEnd(複数のジョブがある場合は、最後のjobEnd)でのみ行います。

  1. 可能ですか実現可能ですか?
  2. 私はジョブ/ステージ/タスクのパフォーマンスを測定し、それを記録してからプログラムで分析しようとしています。それは最善の方法ではないかもしれませんか? Web UIは良いですが、私は物事を見えるようにする必要があります。
  3. endJobイベントでデータフレームの作成を強制できますが、いくつかのエラーがスローされます(基本的にはリスナーにイベントを伝えることはできません)私は不必要な操作を避けたいと思います。私は私が記録し、遅いSparkListenerがイベントを受け取るために他の人をブロックするよう

答えて

1

SparkListenersはできるだけ速くする必要がありますディスクに書き込むことができ、測定のクリーンセットを持っていると思います。別のスレッドを使用してメインイベントディスパッチャスレッドを解放することはできますが、JVMごとに1つのSparkContextを保持するという制限には依然として縛られています。

ただし、この制限は、SparkContext.getOrCreateを使用して現在のSparkContextを要求することができるため、簡単に解決できます。

ただし、アーキテクチャはお勧めしません。これは、ドライバのJVMに、アプリケーション処理(「Web UI」や「Spark History Server」の場合はおそらく既に行われているイベントを収集しない)に「集中する」必要があります。

私はむしろKafkaやCassandraなどの永続ストレージを使用して、イベントを保存したり、他の処理アプリケーションを使用したりします(Spark History Serverのように)。

関連する問題