

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 啟動 Spark 歷史記錄伺服器
<a name="monitor-spark-ui-history"></a>

可使用 Spark 歷史記錄伺服器，在您自己的基礎設施中視覺化 Spark 日誌。您可以在 AWS Glue 主控台中看到在 AWS Glue 4.0 或更新版本上執行 AWS Glue 任務的相同視覺效果，其中包含以標準 （而非舊版） 格式產生的日誌。如需詳細資訊，請參閱[使用 Apache Spark web UI 監控任務](monitor-spark-ui.md)。

您可以使用在 EC2 執行個體上託管伺服器的 AWS CloudFormation 範本來啟動 Spark 歷史記錄伺服器，或使用 Docker 在本機啟動。

**Topics**
+ [使用 啟動 Spark 歷史記錄伺服器並檢視 Spark UI AWS CloudFormation](#monitor-spark-ui-history-cfn)
+ [啟動 Spark 歷史記錄伺服器並使用 Docker 檢視 Spark UI](#monitor-spark-ui-history-local)

## 使用 啟動 Spark 歷史記錄伺服器並檢視 Spark UI AWS CloudFormation
<a name="monitor-spark-ui-history-cfn"></a>

您可以使用 AWS CloudFormation 範本來啟動 Apache Spark 歷史記錄伺服器，並檢視 Spark Web UI。這些範本是範例，您應加以修改以符合您的需求。

**使用 啟動 Spark 歷史記錄伺服器並檢視 Spark UI CloudFormation**

1. 選擇下表中的其中一個 **Launch Stack (啟動堆疊)** 按鈕。這會在 CloudFormation 主控台上啟動堆疊。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/monitor-spark-ui-history.html)

1. 在 **Specify template (指定範本)** 頁面上，選擇 **Next (下一步)**。

1. 在 **Specify stack details (指定堆疊詳細資訊)** 頁面上，輸入 **Stack name (堆疊名稱)**。在 **Parameters** (參數) 下輸入其他資訊。

   1. 

**Spark UI 組態**

      請提供下列資訊：
      + **IP address range (IP 地址範圍)** - 可用於檢視 Spark UI 的 IP 地址範圍。如果您想要限制來自特定 IP 地址範圍的存取，您應該使用自訂值。
      + **History server port (歷史記錄伺服器連接埠)** - Spark UI 的連接埠。您可以使用預設值。
      + **Event log directory (事件日誌目錄)** - 選擇從 AWS Glue 任務或開發端點存放 Spark 事件日誌的位置。您必須使用 **s3a://** 做為事件日誌路徑配置。
      + **Spark package location (Spark 套件位置)** - 您可以使用預設值。
      + **Keystore path (金鑰存放區路徑)** - HTTPS 的 SSL/TLS 金鑰存放區路徑。如果您要使用自訂金鑰存放區檔案，可以在此指定 S3 路徑 `s3://path_to_your_keystore_file`。如果您將此參數保留空白，將會產生並使用以自我簽署憑證為基礎的金鑰存放區。
      + **Keystore password** (金鑰存放區密碼) – 輸入 HTTPS 的 SSL/TLS 金鑰存放區密碼。

   1. 

**EC2 執行個體組態**

      請提供下列資訊：
      + **Instance type (執行個體類型)** - 託管 Spark 歷史記錄伺服器的 Amazon EC2 執行個體類型。由於此範本啟動您帳戶中的 Amazon EC2 執行個體，因此會另外向您的帳戶收取 Amazon EC2 費用。
      + **Latest AMI ID (最新的 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)。
      + **Subnet ID (子網路 ID)** - Spark 歷史記錄伺服器執行個體的 ID。您可以使用 VPC 中的任何子網路。您必須能夠從用戶端連線到網路以連接至子網路。如果您要透過網際網路存取，必須使用在路由表中具有網際網路閘道的公有子網路。

   1. 選擇**下一步**。

1. 在 **Configure stack options** (設定堆疊選項) 頁面上，若要使用目前使用者憑證來決定 CloudFormation 如何在堆疊中建立、修改或刪除資源，請選擇 **Next** (下一步)。您也可以在**許可**區段指定一個角色，而非使用目前使用者的許可，然後選擇**下一步**。

1. 在 **Review (檢閱)** 頁面上檢閱範本。

   選取**我確認 CloudFormation 可能會建立 IAM 資源**，然後選擇**建立堆疊**。

1. 等待堆疊建立。

1. 開啟 **Outputs (輸出)** 標籤。

   1. 如果您使用公有子網路，請複製 **SparkUiPublicUrl** 的 URL。

   1. 如果您使用私有子網路 , 請複製 **SparkUiPrivateUrl** 的 URL。

1. 開啟 Web 瀏覽器，然後貼入該 URL。這可讓您使用 HTTPS 在指定連接埠上存取伺服器。您的瀏覽器可能會無法辨識伺服器的憑證，在此情況下，您必須覆寫其保護並繼續。

## 啟動 Spark 歷史記錄伺服器並使用 Docker 檢視 Spark UI
<a name="monitor-spark-ui-history-local"></a>

如果您偏好本機存取 (不使用 EC2 執行個體做為 Apache Spark 歷史記錄伺服器)，您也可以使用 Docker 來啟動 Apache Spark 歷史記錄伺服器，並在本機檢視 Spark UI。此 Dockerfile 為範例，您應該修改以符合您的需求。

 **先決條件** 

如需有關如何在筆記型電腦上安裝 Docker 的資訊，請參閱 [Docker 引擎社群](https://docs.docker.com/install/)。

**啟動 Spark 歷史記錄伺服器並使用 Docker 在本機檢視 Spark UI**

1. 從 GitHub 下載檔案。

   從 [ AWS Glue 程式碼範例](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/Spark_UI/)下載 Dockerfile 和 `pom.xml`。

1. 決定是否要使用您的使用者憑證或聯合身分使用者憑證來存取 AWS。
   + 若要使用目前的使用者登入資料進行存取 AWS，請在 `docker run`命令`AWS_SECRET_ACCESS_KEY`中取得要用於 ` AWS_ACCESS_KEY_ID`和 的值。如需詳細資訊，請參閱《 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. 使用本機目錄中的檔案建置 Docker 映像檔，對其使用名稱 ` glue/sparkui` 以及標籤 `latest`。

   ```
   $ 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 中取得的憑證值。如需詳細資訊，請參閱 *Hadoop：與 Amazon Web Services 整合*文件中的[將工作階段憑證與 TemporaryAWSCredentialsProvider 搭配使用](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Using_Session_Credentials_with_TemporaryAWSCredentialsProvider)。

      ```
      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。