AWS Glue ETL ジョブの Spark UI の表示に関する問題をトラブルシューティングするにはどうすればよいですか?

最終更新日: 2021 年 10 月 4 日

AWS Glue ETL ジョブ用の Apache Spark UI が表示されません。

解決方法

AWS CloudFormation スタックまたは Docker を使用して Spark UI にアクセスする方法に応じて、以下のいずれかのソリューションを選択します。

AWS CloudFormation スタック

Spark UI を表示するために AWS CloudFormation スタックを使用すると、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが HTTPS リクエストを行い、Spark UI が動作していることを確認します。リクエストが失敗すると、「WaitCondition がタイムアウトしました。1 を予測した場合 0 条件を受け取りました」というエラーが表示され、AWS 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"
  • イベントログディレクトリの有効な Amazon S3 パスを入力したことを確認します。イベントログのパススキームには s3a:// を使用する必要があります。指定した Amazon S3 パスにイベントログファイルがある場合、パスは有効です。
  • ブラウザに正しいポート番号を入力したことを確認します。デフォルトでは、ポート番号は 18080 です (例: http://localhost:18080)。ポート番号を変更するには、コマンドの -p パラメータと、Dockerfile の spark.history.ui.port パラメータを変更します。

引き続き Spark UI を表示できない場合は、ログを確認します。Docker コンテナの stdout および stderr ログを取得するには、-itd パラメータではなく -it パラメータを指定して docker run を実行します。例:

$ 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"

この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?