スキップしてコンテンツを表示

AWS Glue の ETL ジョブの Spark UI が表示されない原因を教えてください。

所要時間2分
0

AWS CloudFormation テンプレートまたは Docker をローカルで使用したところ、AWS Glue ETL ジョブの Apache Spark UI が表示されません。

解決策

Spark UI へのアクセス方法に応じて、次の解決手順を実行します。

CloudFormation スタック

CloudFormation スタックを使用して Spark UI を表示する際、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスは HTTPS リクエストを行います。このリクエストは、Spark UI が機能しているかどうかを確認します。リクエストが失敗した場合、次のエラーが発生します。

"WaitCondition timed out. Received 0 conditions when expecting 1,"

このエラーが発生した後、CloudFormation はスタックをロールバックします。

この問題を解決するには、次の手順を実行します。

  • サブネットが Amazon Simple Storage Service (Amazon S3) API エンドポイントに到達できることを確認します。たとえば、プライベートサブネットを使用する場合は、そのサブネットに仮想プライベートクラウド (VPC) エンドポイントまたは NAT ゲートウェイが存在することを確認します。
  • Spark 履歴サーバーのポート経由でサブネットにアクセスできることを確認します。たとえば、ファイアウォールがポートをブロックしたことが原因で、上記のエラーが発生する場合があります。
  • イベントログディレクトリに有効な Amazon S3 パスを入力したことを確認します。イベントログのパススキームには、s3a:// を指定する必要があります。
    注: 指定した Amazon S3 パスにイベントログファイルが存在する場合は、そのパスは有効です。

エラーが解消されない場合は、Amazon CloudWatch Logs の次のロググループを参照し、詳細を確認します。

  • /aws-glue/sparkui_cfn/cfn-init.log
  • /aws-glue/sparkui_cfn/spark_history_server.log

注: CloudFormation は、スタックがロールバックした際、履歴サーバーの EC2 インスタンスを破棄します。インスタンスの破棄を防ぐには、スタックで削除保護を有効化します。

Docker

Spark UI の表示に Docker を使用しており、ブラウザでは Spark 履歴サーバーに接続できない場合は、次の設定を確認します。

  • アクセスキーとシークレットキーの AWS 認証情報が有効であることを確認します。一時認証情報を使用するには、コマンドで spark.hadoop.fs.s3a.session.token を指定する必要があります。コマンド例:

    docker run -itd -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS \
    -Dspark.history.fs.logDirectory=s3a://path_to_eventlog \
    -Dspark.hadoop.fs.s3a.access.key=AWS_ACCESS_KEY_ID
    -Dspark.hadoop.fs.s3a.secret.key=AWS_SECRET_ACCESS_KEY \
    -Dspark.hadoop.fs.s3a.session.token=SESSION_TOKEN \
    -Dspark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \
    -p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"

    注: AWS_ACCESS_KEY_ID をキー ID に、AWS_SECRET_ACCESS_KEY をシークレットのアクセスキーに、SESSION_TOKEN をセッショントークンに置き換えてください。

  • イベントログディレクトリに有効な Amazon S3 パスを入力したことを確認します。イベントログのパススキームには、s3a:// を指定する必要があります。
    注: 指定した Amazon S3 パスにイベントログファイルが存在する場合は、そのパスは有効です。

  • ブラウザに正しいポート番号を入力したことを確認します。ポート番号を変更するには、 docker run コマンドの -p パラメータおよび、Dockerfile の spark.history.ui.port パラメータを変更します。
    注: デフォルトでは、ポート番号は 18080 です (ポート例: http://localhost:18080)。

依然として Spark UI が表示されない場合は、ログで詳細を確認してください。Docker コンテナの stdout ログおよび stderr ログを取得するには、docker run-itd パラメータではなく -it パラメータを指定して実行します。コマンド例:

docker run -it -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS \
-Dspark.history.fs.logDirectory=s3a://path_to_eventlog \
-Dspark.hadoop.fs.s3a.access.key=AWS_ACCESS_KEY_ID
-Dspark.hadoop.fs.s3a.secret.key=AWS_SECRET_ACCESS_KEY \
-Dspark.hadoop.fs.s3a.session.token=SESSION_TOKEN \
-Dspark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \
-p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"

注: AWS_ACCESS_KEY_ID をキー ID に、AWS_SECRET_ACCESS_KEY をシークレットのアクセスキーに、SESSION_TOKEN をセッショントークンに置き換えてください。

関連情報

Apache Spark ウェブ UI を使用してジョブを監視する

AWS Glue ジョブで Apache Spark ウェブ UI を有効化する

AWS公式更新しました 10ヶ月前
コメントはありません

関連するコンテンツ