【AWS Glue】スイッチロール先のSparkジョブのメトリクス・ログをSparkUIで見れるようにする
公式ドキュメントだけでは分からない、スイッチロール先のSparkジョブをSparkUIで見れるようにする方法をまとめた
SparkUIサーバーの起動方法
起動方法は2種類(公式ドキュメントより)
ここでは、後者のDockerコンテナをローカル環境に立ち上げる方法を用いる。
スイッチロールしている場合、公式ドキュメントでは分からない
AWS GlueでSparkジョブを作っていてそれらのメトリクス・ログをSparkUIで見れるようにしたい場合、公式のドキュメントの手順に従うだけで実現可能です。
ただし、スイッチロール先の環境でSparkジョブを作っている場合、
- アクセスキー
- シークレットキー
- セッショントークン
を取得しなければ、Dockerコンテナを起動することはできない
スクリプトを作成した
run_sparkui.sh
# 引数をロード if [ $# = 0 ]; then echo "第1引数にprofile名を設定してください" exit 1 fi PROFILE_NAME=$1 # 既存のコンテナがあれば停止・削除 docker stop sparkui docker rm sparkui # アクセスキーとセッショントークンを取得 ROLE_ARN=`aws configure get role_arn --profile ${PROFILE_NAME}` LOG_DIR=`aws configure get sparkui_log_dir --profile ${PROFILE_NAME}` if [ -z ${LOG_DIR} ]; then echo "'~/.aws/config' に 'sparkui_log_dir' が設定されていない可能性があります" exit 1 fi AWS_STS_CREDENTIALS=`aws sts assume-role \ --profile ${PROFILE_NAME} \ --role-arn ${ROLE_ARN} \ --role-session-name ${PROFILE_NAME}` AWS_ACCESS_KEY_ID=`echo "${AWS_STS_CREDENTIALS}" | jq -r '.Credentials.AccessKeyId'` AWS_SECRET_ACCESS_KEY=`echo "${AWS_STS_CREDENTIALS}" | jq -r '.Credentials.SecretAccessKey'` SESSION_TOKEN=`echo "${AWS_STS_CREDENTIALS}" | jq -r '.Credentials.SessionToken'` # コンテナ起動 docker run -itd \ -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS \ -Dspark.history.fs.logDirectory=$LOG_DIR \ -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 \ --name sparkui \ glue/sparkui:latest \ "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"
実行手順
0. 前提条件
~/.aws/config
にスイッチロール先のプロファイルを作成していること
[default] region = ap-northeast-1 output = json [profile production] role_arn = arn:aws:iam::123456789012:role/ProductionAccessRole source_profile = default
1. Dockerイメージをビルドする
公式ドキュメントに従う
コードサンプルAWS Glueから Dockerfile と pom.xml をダウンロードします。
docker build -t glue/sparkui:latest .
2. イベントログが出力されるS3パスを追加する
~/.aws/config
にS3パスを追加する
[default]
region = ap-northeast-1
output = json
[profile production]
role_arn = arn:aws:iam::123456789012:role/ProductionAccessRole
+ sparkui_log_dir = s3a://aws-glue-production-spark-event-logs/
source_profile = default
3. スクリプトを実行
実行権限を与える
chmod + x run_sparkui.sh
第一引数にスイッチロール先のプロファイル名を指定して、実行する
./run_sparkui.sh production
4. SparkUIにアクセス
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/spark-ui1.pngdocs.aws.amazon.com
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/spark-ui1.pngdocs.aws.amazon.com
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/spark-ui3.pngdocs.aws.amazon.com