

# 启动 Spark 历史记录服务器
<a name="monitor-spark-ui-history"></a>

您可以使用 Spark 历史记录服务器在自己的基础设施上可视化显示 Spark 日志。对于在 AWS Glue 4.0 或更高版本上运行并以标准（而不是传统）格式生成日志的 AWS Glue 任务，您可以在 AWS Glue 控制台中看到相同的可视化效果。有关更多信息，请参阅 [使用 Apache Spark Web UI 监控作业](monitor-spark-ui.md)。

您可以使用在 EC2 实例上托管服务器的 AWS CloudFormation 模板启动 Spark 历史记录服务器，也可以使用 Docker 在本地启动 Spark 历史记录服务器。

**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 Web UI。这些模板是您应修改以满足要求的示例。

**使用 CloudFormation 启动 Spark 历史记录服务器并查看 Spark UI**

1. 选择下表中的 **Launch Stack (启动堆栈)** 按钮之一。这将在 CloudFormation 控制台上启动堆栈。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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 中的任意子网。您必须能够从客户端访问子网。如果要通过 Internet 访问，则必须使用在路由表中具有 Internet 网关的公有子网。

   1. 选择**下一步**。

1. 在 **Configure stack options**（配置堆栈选项）页面上，要使用当前用户凭证确定 CloudFormation 如何在堆栈中创建、修改或删除资源，请选择 **Next**（下一步）。您还可以在**权限**部分中指定要使用的角色，而不是当前用户权限，然后选择**下一步**。

1. 在 **Review (检查)** 页面上，检查模板。

   选择 **I acknowledge that CloudFormation might create IAM resources (我确认 Amazon CloudFormation 可能创建 IAM 资源)**，然后选择 **Create stack (创建堆栈)**。

1. 等待创建堆栈。

1. 打开 **Outputs (输出)** 选项卡。

   1. 如果您使用的是公有子网，请复制 **SparkUiPublicUrl** 的 URL。

   1. 如果您使用的是私有子网，请复制 **SparkUiPrivateUrl** 的 URL。

1. 打开 Web 浏览器，然后将 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 社区](https://docs.docker.com/install/)。

**使用 Docker 启动 Spark 历史记录服务器并在本地查看 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_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY` 的值。有关更多信息，请参阅《 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 中获得的凭证值。有关更多信息，请参阅 *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。