AWS Glue ETL ジョブの Spark UI 表示に関する問題のトラブルシューティング方法を教えてください。

最終更新日: 2020 年 5 月 21 日

AWS Glue ETL ジョブの Apache Spark UI が表示されない理由は何ですか?

解決方法

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

AWS CloudFormation スタック

AWS CloudFormation スタックを使用して Spark UI を表示すると、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

Docker を使用して Spark UI を表示していて、ウェブブラウザから 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"