

# Apache Spark ウェブ UI を使用したジョブのモニタリング
<a name="monitor-spark-ui"></a>

Apache Spark ウェブ UI を使用して、AWS Glue ジョブシステムで実行されている AWS Glue ETL ジョブと、 AWS Glue 開発エンドポイントで実行されている Spark アプリケーションをモニタリングおよびデバッグできます。Spark UI では、ジョブごとに以下の項目を確認できます。
+ 各 Spark ステージのイベントタイムライン
+ ジョブの Directed Acyclic Graph (DAG)
+ SparkSQL クエリの物理プランと論理プラン
+ 各ジョブの基盤となる Spark 環境変数

Spark Web UI の使用の詳細については、Spark ドキュメントの「[Web UI](https://spark.apache.org/docs/3.3.0/web-ui.html)」を参照してください。Spark UI の結果を解釈してジョブのパフォーマンスを向上させる方法のガイダンスについては、「AWS 規範的ガイダンス」の「[Best practices for performance tuning AWS Glue for Apache Spark jobs](https://docs.aws.amazon.com/prescriptive-guidance/latest/tuning-aws-glue-for-apache-spark/introduction.html)」を参照してください。

 AWS Glue コンソールで Spark UI を表示できます。これは、AWS Glue ジョブが AWS Glue 3.0 以降のバージョンで実行され、新しいジョブのデフォルトである (レガシーではなく) 標準形式でログが生成される場合に使用できます。　 ログファイルが 0.5 GB を超える場合は、AWS Glue 4.0 以降のバージョンのジョブ実行のローリングログサポートを有効にして、ログのアーカイブ、分析、トラブルシューティングを簡素化できます。

Spark UI を有効にするには、AWS Glue コンソールまたは AWS Command Line Interface (AWS CLI) を使用します。Spark UI を有効にすると、AWS Glue ETL ジョブと、AWS Glue 開発エンドポイントの Spark アプリケーションの Spark イベントログを Amazon Simple Storage Service (Amazon S3) の指定した場所にバックアップできます。Amazon S3 にバックアップされたイベントログは、ジョブの実行中 (リアルタイム) でも、ジョブの完了後でも Spark UI で使用できます。ログが Amazon S3 に残っている間は、AWS Glue コンソールの Spark UI でログを表示できます。

## アクセス許可
<a name="monitor-spark-ui-limitations-permissions"></a>

 AWS Glue コンソールで Spark UI を使用するには、`UseGlueStudio` を使用するか、個々のサービス API をすべて追加できます。Spark UI を完全に使用するには、すべての API が必要です。ただし、ユーザーはきめ細かくアクセスするために、IAM 許可にサービス API を追加して SparkUI の機能にアクセスできます。

 `RequestLogParsing` はログの解析を行うため、最も重要です。残りの API は、それぞれの解析済みデータを読み取るためのものです。たとえば、`GetStages` は Spark ジョブのすべてのステージに関するデータへのアクセスを提供します。

 `UseGlueStudio` にマッピングされた Spark UI サービス API のリストは、以下のサンプルポリシーに記載されています。以下のポリシーは、Spark UI 機能のみを使用するためのアクセスを提供します。Amazon S3 や IAM などの許可をさらに追加するには、「[AWS Glue Studio のカスタム IAM ポリシーの作成](https://docs.aws.amazon.com/glue/latest/dg/getting-started-min-privs.html#getting-started-all-gs-privs.html)」を参照してください。

 `UseGlueStudio` にマッピングされた Spark UI サービス API のリストは、以下のサンプルポリシーに記載されています。Spark UI サービス API を使用するとき、`glue:<ServiceAPI>` という名前空間を使用してください。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowGlueStudioSparkUI",
      "Effect": "Allow",
      "Action": [
        "glue:RequestLogParsing",
        "glue:GetLogParsingStatus",
        "glue:GetEnvironment",
        "glue:GetJobs",
        "glue:GetJob",
        "glue:GetStage",
        "glue:GetStages",
        "glue:GetStageFiles",
        "glue:BatchGetStageFiles",
        "glue:GetStageAttempt",
        "glue:GetStageAttemptTaskList",
        "glue:GetStageAttemptTaskSummary",
        "glue:GetExecutors",
        "glue:GetExecutorsThreads",
        "glue:GetStorage",
        "glue:GetStorageUnit",
        "glue:GetQueries",
        "glue:GetQuery"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

## 制限事項
<a name="monitor-spark-ui-limitations"></a>
+ AWS Glue コンソールの Spark UI は、レガシーログ形式であるため、2023 年 11 月 20 日よりも前に発生したジョブ実行には使用できません。　
+  AWS Glue コンソールの Spark UI は、ストリーミング ジョブでデフォルトで生成されるログなど、AWS Glue 4.0 のローリング ログをサポートしています。生成されたすべてのロールされたログファイルの最大合計は 2 GB です。ロールログがサポートされていない AWS Glue ジョブの場合、SparkUI でサポートされるログイベントファイルの最大サイズは 0.5 GB です。
+  サーバーレス Spark UI は、VPC のみがアクセスできる Amazon S3 バケットに保存されている Spark イベントログでは使用できません。

## 例: Apache Spark Web UI
<a name="monitor-spark-ui-limitations-example"></a>

この例では、Spark UI を使用してジョブのパフォーマンスを理解する方法を示します。　 スクリーンショットは、自己管理型の Spark 履歴サーバーが提供する Spark ウェブ UI を示しています。AWS Glue コンソールの Spark UI にも同様のビューが表示されます。　 Spark Web UI の使用の詳細については、Spark ドキュメントの「[Web UI](https://spark.apache.org/docs/3.3.0/web-ui.html)」を参照してください。

次の例に示す Spark アプリケーションでは、2 つのデータソースから読み取り、結合変換を実行し、それを Parquet 形式で Amazon S3 に書き込みます。　

```
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from pyspark.sql.functions import count, when, expr, col, sum, isnull
from pyspark.sql.functions import countDistinct
from awsglue.dynamicframe import DynamicFrame
 
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
 
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
 
job = Job(glueContext)
job.init(args['JOB_NAME'])
 
df_persons = spark.read.json("s3://awsglue-datasets/examples/us-legislators/all/persons.json")
df_memberships = spark.read.json("s3://awsglue-datasets/examples/us-legislators/all/memberships.json")
 
df_joined = df_persons.join(df_memberships, df_persons.id == df_memberships.person_id, 'fullouter')
df_joined.write.parquet("s3://aws-glue-demo-sparkui/output/")
 
job.commit()
```

次の DAG 可視化は、この Spark ジョブのさまざまなステージを示しています。

![\[ジョブ 0 の 2 つの完了済みステージを示す Spark UI のスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/spark-ui1.png)


次に示すジョブのイベントタイムラインは、さまざまな Spark エグゼキュターの開始、実行、終了を示しています。

![\[さまざまな Spark エグゼキュターの完了、失敗、アクティブの各ステージを示す Spark UI のスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/spark-ui2.png)


次の画面は、SparkSQL クエリプランの詳細を示しています。
+ 解析された論理プラン
+ 分析された論理プラン
+ 最適化された論理プラン
+ 実行のための物理プラン

![\[SparkSQL クエリプラン: 解析された論理プラン、分析された論理プラン、最適化された論理プラン、および実行のための物理プラン。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/spark-ui3.png)


**Topics**
+ [アクセス許可](#monitor-spark-ui-limitations-permissions)
+ [制限事項](#monitor-spark-ui-limitations)
+ [例: Apache Spark Web UI](#monitor-spark-ui-limitations-example)
+ [AWS Glue ジョブ用の Apache Spark ウェブ UI の有効化](monitor-spark-ui-jobs.md)
+ [Spark 履歴サーバーの起動](monitor-spark-ui-history.md)

# AWS Glue ジョブ用の Apache Spark ウェブ UI の有効化
<a name="monitor-spark-ui-jobs"></a>

Apache Spark ウェブ UI を使用して、AWS Glue ジョブシステムで実行されている AWS Glue ETL ジョブをモニタリングおよびデバッグできます。Spark UI は、AWS Glue コンソールまたは AWS Command Line Interface (AWS CLI) を使用して設定できます。

30 秒ごとに、AWS Glue は指定した Amazon S3 パスに Spark イベントログをバックアップします。

**Topics**
+ [Spark UI の設定 (コンソール)](#monitor-spark-ui-jobs-console)
+ [Spark UI の設定 (AWS CLI)](#monitor-spark-ui-jobs-cli)
+ [Notebook を使用するセッション用の Spark UI の設定](#monitor-spark-ui-sessions)
+ [ローリングログを有効にする](#monitor-spark-ui-rolling-logs)

## Spark UI の設定 (コンソール)
<a name="monitor-spark-ui-jobs-console"></a>

以下のステップに従い、AWS マネジメントコンソールを使用して Spark UI を設定します。AWS Glue ジョブを作成する際、Spark UI はデフォルトで有効になります。　

**ジョブを作成または編集するときに Spark UI をオンにするには　**

1. AWS マネジメントコンソールにサインインし、AWS Glue コンソール ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)) を開きます。

1. ナビゲーションペインで **ジョブ**を選択します。

1. **[ジョブを追加]** を選択するか、または既存のジョブを選択します。

1. **[ジョブの詳細]** で、**[詳細プロパティ]** を開きます。

1. **[Spark UI]** タブで、**[Spark UI ログを Amazon S3 に書き込む]** を選択します。　

1. ジョブの Spark イベントログを保存するための Amazon S3 パスを指定します。ジョブでセキュリティ設定を使用する場合、暗号化は Spark UI ログファイルにも適用されることに注意してください。　 詳細については、「[AWS Glue​ によって書き込まれたデータの暗号化](encryption-security-configuration.md)」を参照してください。

1. **[Spark UI のログ記録とモニタリングの設定]** で、次のように操作します。
   + AWS Glue コンソールで表示するログを生成している場合は、**[標準]** を選択します。
   + Spark 履歴サーバーで表示するログを生成している場合は、**[レガシー]** を選択します。
   + 両方を生成することを選択することもできます。

## Spark UI の設定 (AWS CLI)
<a name="monitor-spark-ui-jobs-cli"></a>

Spark UI で表示するログを生成するには、AWS Glue コンソールで AWS CLI を使用して、次のジョブパラメータを AWS Glue ジョブに渡します。詳細については、「[AWS Glue ジョブでジョブパラメータを使用する](aws-glue-programming-etl-glue-arguments.md)」を参照してください。

```
'--enable-spark-ui': 'true',
'--spark-event-logs-path': 's3://s3-event-log-path'
```

ログをレガシーの場所に配布するには、`--enable-spark-ui-legacy-path` パラメータを `"true"` に設定します。両方の形式でログを生成したくない場合は、`--enable-spark-ui` パラメータを削除します。

## Notebook を使用するセッション用の Spark UI の設定
<a name="monitor-spark-ui-sessions"></a>

**警告**  
AWS Glue インタラクティブセッションは現在、コンソールでの Spark UI をサポートしていません。Spark 履歴サーバーを設定します。

 AWS Glue ノートブック を使用する場合は、セッションを開始する前に SparkUI の設定をセットアップします。そのためには、次のように `%%configure` セルマジックを使用します。

```
%%configure { “--enable-spark-ui”: “true”, “--spark-event-logs-path”: “s3://path” }
```

## ローリングログを有効にする
<a name="monitor-spark-ui-rolling-logs"></a>

 AWS Glue ジョブの SparkUI とローリングログファイルを有効にすると、いくつかの利点があります。
+  ローリングログイベントファイル – ローリングログイベントファイルを有効にすると、AWS Glue はジョブ実行の各ステップごとに個別のログファイルを生成し、特定のステージまたは変換に固有の問題の特定とトラブルシューティングを容易にします。
+  ログ管理の向上 – ログファイルをローリングすると、ログファイルをより効率的に管理できます。1 つの大きなログファイルを持つ代わりに、ログはジョブ実行ステージに基づいて、より小さく管理しやすいファイルに分割されます。これにより、ログのアーカイブ、分析、トラブルシューティングを簡素化できます。
+  障害耐性の向上 – AWS Glue ジョブが失敗または中断された場合、ローリングログイベントは、最後に成功したステージに関する貴重な情報を提供するため、最初から開始するのではなく、その時点からジョブを再開しやすくなります。
+  コストの最適化 – ローリングログファイルを有効にすることで、ログファイルに関連するストレージコストを削減できます。1 つの大きなログファイルを保存する代わりに、より小さく、管理しやすいログファイルを保存します。これは、特に長時間実行されるジョブや複雑なジョブの場合、費用対効果が高くなります。

 新しい環境では、ユーザーは以下を通じてローリングログを明示的に有効にできます。

```
'—conf': 'spark.eventLog.rolling.enabled=true'
```

or

```
'—conf': 'spark.eventLog.rolling.enabled=true —conf 
spark.eventLog.rolling.maxFileSize=128m'
```

 ローリングログが有効な場合、`spark.eventLog.rolling.maxFileSize` はロールオーバーする前のイベントログファイルの最大サイズを指定します。このオプションパラメータが指定されていない場合のデフォルト値は 128 MB です。最小は 10 MB です。

 生成されたすべてのロールされたログファイルの最大合計は 2 GB です。ローリングログがサポートされていない AWS Glue ジョブの場合、SparkUI でサポートされるログイベントファイルの最大サイズは 0.5 GB です。

追加の設定を渡すことで、ストリーミングジョブのローリングログをオフにすることができます。　 ログファイルが非常に大きいと、管理にコストがかかる場合があることに注意してください。　

ローリングログをオフにするには、次の設定を提供します。

```
'--spark-ui-event-logs-path': 'true',
'--conf': 'spark.eventLog.rolling.enabled=false'
```

# Spark 履歴サーバーの起動
<a name="monitor-spark-ui-history"></a>

Spark 履歴サーバーを使用して、独自のインフラストラクチャ上で Spark ログを視覚化できます。(レガシーではなく) 標準形式で生成されたログで、AWS Glue 4.0 以降のバージョンで AWS Glue ジョブが実行された場合、AWS Glue コンソールで同じ視覚化を確認することができます。詳細については、「[Apache Spark ウェブ UI を使用したジョブのモニタリング](monitor-spark-ui.md)」を参照してください。

EC2 インスタンスでサーバーをホストする AWS CloudFormation テンプレートを使用して Spark 履歴サーバーを起動するか、Docker を使用してローカルで起動できます。

**Topics**
+ [AWS CloudFormation を使用した Spark 履歴サーバーの起動と Spark UI の表示](#monitor-spark-ui-history-cfn)
+ [Docker を使用した Spark 履歴サーバーの起動と Spark UI の表示](#monitor-spark-ui-history-local)

## AWS CloudFormation を使用した Spark 履歴サーバーの起動と Spark UI の表示
<a name="monitor-spark-ui-history-cfn"></a>

AWS CloudFormation テンプレートを使用して Apache Spark 履歴サーバーを起動し、Spark ウェブ UI を表示できます。これらのテンプレートは、要件に応じて変更する必要があるサンプルです。

**CloudFormation を使用して Spark 履歴サーバーを起動し、Spark UI を表示するには**

1. 次の表に示す**起動スタック**ボタンの 1 つを選択します。これにより、CloudFormation コンソールでスタックが起動されます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/monitor-spark-ui-history.html)

1. [**Specify template (テンプレートの指定)**] ページで、[**次へ**] を選択します。

1. [**Specify stack details (スタック詳細の指定)**] ページで、[**Stack name (スタック名)**] に入力します。**パラメータ**の下に追加情報を入力します。

   1. 

**Spark UI の設定**

      以下の情報を指定します。
      + **IP アドレス範囲** – Spark UI の表示に使用できる IP アドレス範囲。特定の IP アドレス範囲からのアクセスを制限する場合は、カスタム値を使用する必要があります。
      + **履歴サーバーポート** – Spark UI のポート。デフォルト値を使用できます。
      + **イベントログディレクトリ** – AWS Glue ジョブまたは開発エンドポイントから保存された Spark イベントログの場所を選択します。イベントログのパススキームとして **s3a://** を使用する必要があります。
      + **Spark パッケージの場所** – デフォルト値を使用できます。
      + **キーストアパス** – HTTPS の SSL/TLS キーストアパス。カスタムキーストアファイルを使用する場合は、ここで S3 パス `s3://path_to_your_keystore_file` を指定できます。このパラメータを空のままにすると、自己署名証明書ベースのキーストアが生成されて使用されます。
      + **キーストアパスワード** – HTTPS 用の SSL/TLS キーストアパスワードを入力します。

   1. 

**EC2 インスタンスの設定**

      以下の情報を指定します。
      + **インスタンスタイプ** – Spark 履歴サーバーをホストする Amazon EC2 インスタンスのタイプ。このテンプレートによってアカウントで Amazon EC2 インスタンスが起動されるため、Amazon EC2 のコストがアカウントに別個に課金されます。
      + **最新の AMI ID** – Spark 履歴サーバーインスタンスの Amazon Linux 2 の AMI ID。デフォルト値を使用できます。
      + **VPC ID** – Spark 履歴サーバーインスタンスの Virtual Private Cloud (VPC) の ID。アカウントで利用可能な VPC のいずれかを使用できます。デフォルトの VPC と [デフォルトのネットワーク ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#default-network-acl) を使用することは推奨されません。詳細については、「*Amazon VPC ユーザーガイド*」の「[デフォルト VPC とデフォルトサブネット](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html)」および「[VPC を作成する](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC)」を参照してください。
      + **サブネット ID** – Spark 履歴サーバーインスタンスの ID。VPC 内の任意のサブネットを使用できます。クライアントからサブネットのネットワークにアクセスできる必要があります。インターネット経由でアクセスする場合は、ルートテーブルにインターネットゲートウェイがあるパブリックサブネットを使用する必要があります。

   1. [**次へ**] を選択します。

1. [**Configure stack options**] ページで、CloudFormation がスタック内のリソースを作成、変更、または削除する方法を決定するために現在のユーザー認証情報を使用する場合は、[Next] をクリックします。**アクセス許可**セクションで、現在のユーザー権限の代わりに使用するロールを指定し、**[次へ]** を選択することもできます。

1. [**確認**] ページで、テンプレートを確認します。

   [**I acknowledge that CloudFormation might create IAM resources**] (CloudFormation によって IAM リソースが作成される場合があることを承認します) を選択し、[**Create stack**] (スタックの作成) を選択します。

1. スタックが作成されるまで待ちます。

1. [**Outputs (出力)**] タブをクリックします。

   1. パブリックサブネットを使用している場合は、 **SparkUiPublicUrl** の URL をコピーします。

   1. プライベートサブネットを使用している場合は、 **SparkUiPrivateUrl** の URL をコピーします。

1. ウェブブラウザを開き、URL を貼り付けます。これにより、指定したポートで HTTPS を使用してサーバーにアクセスできます。ブラウザがサーバーの証明書を認識しない場合があります。この場合、保護を上書きして続行する必要があります。

## Docker を使用した Spark 履歴サーバーの起動と Spark UI の表示
<a name="monitor-spark-ui-history-local"></a>

ローカルアクセスを希望する (Apache Spark 履歴サーバーの EC2 インスタンスを使用しない) 場合は、Docker を使用して Apache Spark 履歴サーバーを起動し、Spark UI をローカルに表示することもできます。この Dockerfile は、要件に応じて変更する必要があるサンプルです。

 **前提条件** 

ラップトップに Docker をインストールする方法については、[Docker Engine community](https://docs.docker.com/install/) を参照してください。

**Docker を使用して Spark 履歴サーバーを起動し、Spark UI をローカルに表示するには**

1. GitHub からファイルをダウンロードします。

   Dockerfileと`pom.xml` を [[ AWS Glueコードサンプル](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/Spark_UI/)]からダウンロードします。

1. アクセス AWS にユーザー認証情報を使用するか、フェデレーティッドユーザー認証情報を使用するかを決定します。
   + 現在のユーザー認証情報を使用してアクセスを AWS にするには、` AWS_ACCESS_KEY_ID` と `AWS_SECRET_ACCESS_KEY` で使用する値を `docker run` コマンドで取得します。詳細については、「IAM ユーザーガイド」の「[IAM ユーザーのアクセスキーの管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)」を参照してください。
   + SAML 2.0 フェデレーティッドユーザーを使用して AWS にアクセスするには、` AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY`、` AWS_SESSION_TOKEN` で値を取得します。詳細については、「[一時的なセキュリティ認証情報のリクエスト](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)」を参照してください。

1. `docker run` コマンドで使用するイベントログディレクトリの場所を決定します。

1. ローカルディレクトリ内のファイルを使用して、名前 ` glue/sparkui` とタグ `latest` を指定して、Docker イメージを構築します。

   ```
   $ docker build -t glue/sparkui:latest . 
   ```

1. Docker コンテナを作成してスタートします。

   次のコマンドでは、ステップ 2 および 3 で事前に取得した値を使用します。

   1. ユーザー認証情報を使用して docker コンテナを作成するには、次のようなコマンドを使用します。

      ```
      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"
       -p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"
      ```

   1. 一時的な認証情報を使用して Docker コンテナを作成するには、` org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider` をプロバイダとして指定し、ステップ 2 で取得した認証情報値を指定します。詳細については、「[一時的な AWSCredentialsProvider でのセッション資格情報の使用](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Using_Session_Credentials_with_TemporaryAWSCredentialsProvider)の*Hadoop: Amazon Web Services との統合*」のドキュメント を参照してください。

      ```
      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=AWS_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"
      ```
**注記**  
これらの設定パラメータは、[ Hadoop-AWS モジュール](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html)に由来します。場合によっては、ユースケースに基づいて特定の設定を追加する必要があります。たとえば、隔離されたリージョンのユーザーは、` spark.hadoop.fs.s3a.endpoint` を設定する必要があります。

1. ブラウザで `http://localhost:18080` を開き、Spark UI をローカルに表示します。