

# 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 をローカルに表示します。