監視および計測器

Sparkアプリケーションを監視するいくつかの方法があります: web UI、マトリクス、および実験的な計測器。

Web インタフェース

各SparkContextはデフォルトではポート4040でweb UIを起動します。これはアプリケーションに関する有用な情報を表示します。以下のものが含まれます:

単にwebブラウザでhttp://<driver-node>:4040を開くことで、このインタフェースにアクセスできます。同じホスト上で複数のSparkContextが実行中の場合、それらは4040から始まる連続したポートに割り当てられるでしょう(4041, 4042など)。

デフォルトではこの情報はアプリケーションの持続期間のみ利用可能です。後でwebUIを見るためには、アプリケーションの開始前にspark.eventLog.enabled をtrueに設定します。これはUIに表示された情報を符号化したSparkイベントを永続的なストレージに記録するようにSparkを設定します。

後で見る

Sparkのスタンドアローンモードクラスタマネージャーも独自のweb UIを持ちます。アプリケーションがライフタイムを超えてイベントを記録した場合、スタンドアローンマスターweb UIはアプリケーションが終了した後で自動的にアプリケーションUIを再描画するでしょう。

SparkがMesosあるいはYARN上で実行されている場合でも、アプリケーションのイベントログが存在するならSparkの履歴サーバを使って終了したアプリケーションのUIを再構築することが可能です。以下を実行することで履歴サーバを開始することができます:

./sbin/start-history-server.sh

ファイルシステム プロバイダ クラス(以下のspark.history.providerを見てください)を使っている場合、ログの基本ディレクトリはspark.history.fs.logDirectory設定オプションで提供され、基本ディレクトリはアプリケーションのログイベントを表すサブディレクトリを含まなければなりません。これはデフォルトではhttp://<server-url>:18080でwebインタフェースを作成します。履歴サーバは以下のようにして設定することができます:

環境変数意味
SPARK_DAEMON_MEMORY 履歴サーバに割り当てるメモリ (デフォルト: 1g)。
SPARK_DAEMON_JAVA_OPTS 履歴サーバのためのJVMオプション (デフォルト: none)。
SPARK_PUBLIC_DNS 履歴サーバの公開アドレス。設定されない場合、アプリケーションの履歴へのリンクはサーバの内部アドレスが使われ、壊れたリンクとなります (デフォルト: none)。
SPARK_HISTORY_OPTS spark.history.* 履歴サーバの設定オプション (デフォルト: none)。
プロパティ名デフォルト意味
spark.history.provider org.apache.spark.deploy.history.FsHistoryProvider アプリケーション履歴のバックエンド実装のクラス名。今のところ、Sparkによって提供された1つの実装しかありません。これはファイルシステムに保存されたアプリケーションログを探します。
spark.history.fs.logDirectory file:/tmp/spark-events 履歴サーバによってロードされるアプリケーションイベントログを含むディレクトリ
spark.history.fs.update.interval 10s この履歴サーバによって表示される情報が更新される期間各更新は永続化ストレージ内のイベントログになされたどのような変更もチェックします。
spark.history.retainedApplications 50 UIが保持するアプリケーションの数。この上限を超えると、一番古いアプリケーションが削除されます。
spark.history.ui.port 18080 履歴サーバのwebインタフェースが紐付けられるポート。
spark.history.kerberos.enabled false 履歴サーバがログインするためにkerberosを使わなければならないかどうかを示す。もし履歴サーバがsecureなHadoopクラスタ上のHDFSファイルにアクセスする場合にこれは有用です。これがtrueの場合、spark.history.kerberos.principal およびspark.history.kerberos.keytabの設定が使われます。
spark.history.kerberos.principal (none) 履歴サーバのためのKerberosプリンシパル名。
spark.history.kerberos.keytab (none) 履歴サーバのためのkerberosキータブファイルの場所
spark.history.ui.acls.enable false アプリケーションを表示するユーザを認証するためにaclがチェックされなければならないかどうかを指定する。有効な場合、アプリケーションが実行される時に各アプリケーションのspark.ui.acls.enableが設定されているかどうかに関係なく、アクセス制御の調査が行われます。アプリケーションの所有者は自身のアプリケーションを見るために常に認証されることになり、アプリエk-ションが実行された場合にspark.ui.view.aclsを使って指定された全てのユーザもアプリケーションを見るために認証されるでしょう。無効な場合、一切のアクセス制御が行われません。
spark.history.fs.cleaner.enabled false 履歴サーバが定期的にイベントログをストレージから削除するかどうかを指定する。
spark.history.fs.cleaner.interval 1d ジョブ履歴クリーナーがファイルを削除するためにチェックする頻度。もしファイルがspark.history.fs.cleaner.maxAgeより古い場合は、それらは削除されます。
spark.history.fs.cleaner.maxAge 7d これより古いジョブ履歴ファイルは履歴クリーナーが実行される時に削除されるでしょう。

これら全てのUI内でテーブルはヘッダーをクリックすることでソート可能です。遅いタスク、データのゆがみなどを識別するのを容易にします。

履歴サーバは終了したSparkジョブのみを表示することに注意してください。One way to signal the completion of a Spark job is to stop the Spark Context explicitly (sc.stop()), or in Python using the with SparkContext() as sc: to handle the Spark Context setup and tear down, and still show the job history on the UI.

REST API

UI内でマトリックスを見ることに加えて、それらはJSONとして利用可能です。これにより開発者は新しい表示方法およびSparkのための監視ツールを簡単に作成することができます。JSONは実行中のアプリケーションおよび履歴サーバ内の両方で利用可能です。エンドポイントは /api/v1にマウントされます。例えば、履歴サーバの場合、それらは一般的にhttp://<server-url>:18080/api/v1でアクセスすることができ、実行中のアプリケーションの場合http://localhost:4040/api/v1で利用可能です。

エンドポイント意味
/applications 全てのアプリケーションのリスト
/applications/[app-id]/jobs 指定されたアプリケーションの全てのジョブのりすと
/applications/[app-id]/jobs/[job-id] 指定されたジョブの詳細
/applications/[app-id]/stages 指定されたアプリケーションの全てのステージのリスト
/applications/[app-id]/stages/[stage-id] 指定されたステージの全ての試行のリスト
/applications/[app-id]/stages/[stage-id]/[stage-attempt-id] 指定されたステージの試行の詳細
/applications/[app-id]/stages/[stage-id]/[stage-attempt-id]/taskSummary 指定されたステージの試行の中の全てのタスクのマトリックスの概要。
/applications/[app-id]/stages/[stage-id]/[stage-attempt-id]/taskList 指定されたステージの試行の全てのタスクのリスト
/applications/[app-id]/executors 指定されたアプリケーションの全てのexecutorのリスト
/applications/[app-id]/storage/rdd 指定されたアプリケーションのための保存されたRDDのリスト
/applications/[app-id]/storage/rdd/[rdd-id] 指定されたRDDのストレージ状態の詳細
/applications/[app-id]/logs 指定されたアプリケーションの全ての試みについてのイベントログをzipファイルとしてダウンロードします。
/applications/[app-id]/[attempt-id]/logs 指定されたアプリケーションの特定の試みについてのイベントログをzipファイルとしてダウンロードします。

Yarnで実行中の場合、各アプリケーションは複数の試行を持ちます。そのため[app-id] は全ての場合において実際は[app-id]/[attempt-id] です。

これらのエンドポイントはその上でアプリケーションを開発を容易にするために強くバージョン付けされています。解くに、Sparkは以下を保証します:

実行中のアプリケーションのUIを検証する時でも、applications/[app-id]の分割はたった一つのアプリケーションだけが利用可能だとしてもまだ必要です。例えば、実行中のアプリケーションのジョブのリストを見るには、http://localhost:4040/api/v1/applications/[app-id]/jobsに行きます。これは両方のモードにおいてパスを矛盾が無い状態にします。

マトリックス

SparkはCoda Hale Metrics Libraryに基づいた設定可能なマトリックスシステムを持っています。これにより、ユーザはSparkマトリックスにHTTP, JMX およびCSV ファイルを含む様々なsinkを伝えることができます。このマトリクスシステムは、Sparkが $SPARK_HOME/conf/metrics.propertiesに存在すると期待する設定ファイルを通じて設定することができます。独自のファイルの場所はspark.metrics.conf設定プロパティによって指定することができます。SparkのマトリックスはSparkコンポーネントに対応する異なる インスタンス に分離されます。各インスタンスの中で、マトリックが伝える一連のsinkを設定することができます。現在のところ以下のインスタンスがサポートされています:

各インスタンスは0個以上のsinksに対して報告することができます。sinkはorg.apache.spark.metrics.sink パッケージに含まれています。

Sparkはライセンスの制限のためにデフォルトのビルドに含まれていないGanglia sinkもサポートします:

GangliaSinkをインストールするには、Sparkのカスタムビルドを実行する必要があるでしょう。このライブラリを組み込むことでSparkパッケージにLGPLでライセンスされたコードが含まれることに注意してください。sbt ユーザに関しては、ビルドする前に SPARK_GANGLIA_LGPL 環境変数を設定してください。Mavenユーザに関しては、 -Pspark-ganglia-lgpl プロファイルを有効にします。In addition to modifying the cluster’s Spark build user applications will need to link to the spark-ganglia-lgpl artifact.

マトリックスの設定の構文は $SPARK_HOME/conf/metrics.properties.templateの例の設定ファイル内で定義されています。

上級の計測器

Sparkのジョブのパフォーマンスをプロファイルするために幾つかの外部ツールを使用することができます。

TOP
inserted by FC2 system