

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Amazon EMR 中查看持久性应用程序用户界面
<a name="app-history-spark-UI"></a>

从 Amazon EMR 版本 5.25.0 开始，您可以使用集群的 **Summary (摘要)** 页面或控制台中的 **Application user interfaces (应用程序用户界面)** 选项卡连接到在集群外托管的持久性 Spark 历史记录服务器应用程序的详细信息。从 Amazon EMR 版本 5.30.1 开始，提供了 Tez UI 和 YARN 时间线服务器持久性应用程序界面。对持久性应用程序历史记录的一键式链接访问提供了以下好处：
+ 您可以快速分析活动的作业和作业历史记录并进行故障排除，而无需通过 SSH 连接来设置 Web 代理。
+ 您可以访问处于活动状态和终止状态的集群的应用程序历史记录和相关日志文件。日志在应用程序结束后的 30 天内均可用。

在控制台中导航到您的集群详细信息，选择**应用程序**选项卡。集群启动后，选择您想要的应用程序 UI。应用程序 UI 将在新的浏览器选项卡中打开。有关更多信息，请参阅[监控和检测](https://spark.apache.org/docs/latest/monitoring.html)。

您可以通过 Spark 历史记录服务器、YARN 时间线服务器和 Tez UI 上的链接来查看 YARN 容器日志。

**注意**  
要从 Spark 历史记录服务器、YARN 时间线服务器和 Tez UI 访问 YARN 容器日志，您必须为集群启用 Amazon S3 日志记录。如果未启用日志记录，则指向 YARN 容器日志的链接将不起作用。

## 日志收集
<a name="app-history-spark-UI-event-logs"></a>

要启用一键式访问持久性应用程序用户界面，Amazon EMR 需要收集两种类型的日志：
+ **应用程序事件日志** 会收集到 EMR 系统存储桶中。通过使用 Amazon S3 托管密钥的服务器端加密 (SSE-S3) 对事件日志进行静态加密。如果您为集群使用私有子网，请确保 ARNs 在私有子网的 Amazon S3 策略的资源列表中包含正确的系统存储桶。有关更多信息，请参阅[私有子网的最小 Amazon S3 策略](https://docs.aws.amazon.com/emr/latest/ManagementGuide/private-subnet-iampolicy.html)。
+ **YARN 容量日志**收集到您拥有的 Amazon S3 存储桶中。您必须为集群启用日志记录才能访问 YARN 容器日志。有关更多信息，请参阅[配置集群日志记录和调试](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-debugging.html)。

如果您出于隐私原因需要禁用此功能，则可在创建集群时使用引导脚本来停止守护程序，如以下示例所示。

```
aws emr create-cluster --name "Stop Application UI Support" --release-label emr-7.12.0 \
--applications Name=Hadoop Name=Spark --ec2-attributes KeyName=<myEMRKeyPairName> \
--instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=TASK,InstanceCount=1,InstanceType=m3.xlarge \
--use-default-roles --bootstrap-actions Path=s3://region.elasticmapreduce/bootstrap-actions/run-if,Args=["instance.isMaster=true","echo Stop Application UI | sudo tee /etc/apppusher/run-apppusher; sudo systemctl stop apppusher || exit 0"]
```

运行此引导启动脚本后，Amazon EMR 不会将任何 Spark 历史记录服务器或 YARN 时间线服务器事件日志收集到 EMR 系统存储桶中。**Application user interfaces (应用程序用户界面)** 选项卡上没有可用的应用程序历史记录信息，并且您将不再能够从控制台访问所有应用程序用户界面。

## 大型 Spark 事件日志文件
<a name="app-history-spark-UI-large-event-logs"></a>

在某些情况下，长时间运行的 Spark 作业（例如 Spark 流式处理）和大型作业（例如 Spark SQL 查询）可能会生成大型事件日志。使用大型事件日志，您可以快速耗尽计算实例上的磁盘空间，并在加载 Persistent 时遇到`OutOfMemory`错误 UIs。要避免这些问题，建议您启用 Spark 事件日志滚动和压缩功能。此功能在 Amazon EMR 版本 emr-6.1.0 及更高版本上可用。有关滚动和压缩的更多详细信息，请参阅 Spark 文档中的[对滚动事件日志文件应用压缩](https://spark.apache.org/docs/latest/monitoring.html#applying-compaction-on-rolling-event-log-files)。

要激活 Spark 事件日志滚动和压缩功能，请启用以下 Spark 配置设置。
+ `spark.eventLog.rolling.enabled`：根据大小启用事件日志滚动。默认情况下，此设置处于禁用状态。
+ `spark.eventLog.rolling.maxFileSize`：激活滚动时，指定事件日志文件在滚动之前的最大大小。默认值为 128 MB。
+ `spark.history.fs.eventLog.rolling.maxFilesToRetain`：指定要保留的非压缩事件日志文件的最大数量。默认情况下，会保留所有事件日志文件。设置为较小的数字以压缩较旧的事件日志。最小值为 1。

请注意，压缩会尝试排除具有过时事件日志文件的事件，如下所示。如果它确实丢弃了事件，则在 Spark 历史记录服务器 UI 上将看不到它们。
+ 已完成作业的事件以及相关阶段或任务事件。
+ 终止执行程序的事件。
+ 已完成 SQL 查询的事件，以及相关作业、阶段和任务事件。

**启动启用滚动和压缩的集群**

1. 使用以下配置创建 `spark-configuration.json` 文件。

   ```
   [
      {
        "Classification": "spark-defaults",
           "Properties": {
              "spark.eventLog.rolling.enabled": true,
              "spark.history.fs.eventLog.rolling.maxFilesToRetain": 1
           }
      }
   ]
   ```

1. 使用 Spark 滚动压缩配置创建集群，如下所示。

   ```
   aws emr create-cluster \
   --release-label emr-6.6.0 \
   --instance-type m4.large \
   --instance-count 2 \
   --use-default-roles \
   --configurations file://spark-configuration.json
   ```

## 查看持久性应用程序用户界面的权限
<a name="app-history-spark-UI-permissions"></a>

以下示例展示了访问持久性应用程序用户界面所需的角色权限。对于启用了运行时角色的集群，这将仅允许用户访问由同一用户身份和运行时角色提交的应用程序。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:CreatePersistentAppUI",
        "elasticmapreduce:DescribePersistentAppUI"
      ],
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/clusterId"
      ],
      "Sid": "AllowELASTICMAPREDUCECreatepersistentappui"
    },
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:GetPersistentAppUIPresignedURL"
      ],
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/clusterId",
        "arn:aws:elasticmapreduce:*:123456789012:persistent-app-ui/*"
      ],
      "Condition": {
        "StringEqualsIfExists": {
          "elasticmapreduce:ExecutionRoleArn": [
            "arn:aws:iam::123456789012:role/executionRoleArn"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEGetpersistentappuipresignedurl"
    }
  ]
}
```

------

以下示例展示了针对启用了运行时角色的集群移除在持久性应用程序用户界面中查看应用程序的限制所需的角色权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:CreatePersistentAppUI",
        "elasticmapreduce:DescribePersistentAppUI",
        "elasticmapreduce:AccessAllEventLogs"
      ],
      "Resource": [
        "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/j-XXXXXXXXXXXXX"
      ],
      "Sid": "AllowELASTICMAPREDUCECreatepersistentappui"
    },
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:GetPersistentAppUIPresignedURL"
      ],
      "Resource": [
        "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/j-XXXXXXXXXXXXX",
        "arn:aws:elasticmapreduce:us-east-1:123456789012:persistent-app-ui/*"
      ],
      "Condition": {
        "StringEqualsIfExists": {
          "elasticmapreduce:ExecutionRoleArn": [
            "arn:aws:iam::123456789012:role/YourExecutionRoleName"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEGetpersistentappuipresignedurl"
    }
  ]
}
```

------

## 注意事项和限制
<a name="app-history-spark-UI-limitations"></a>

一键式访问持久性应用程序用户界面当前具有以下限制。
+ 当应用程序详细信息显示在 Spark 历史记录服务器 UI 上时，至少会有两分钟的延迟。
+ 仅当应用程序的事件日志目录位于 HDFS 中时，此功能才起作用。默认情况下，Amazon EMR 将事件日志存储在 HDFS 的目录中。如果您将默认目录更改为其它文件系统（例如 Amazon S3），则此功能将不起作用。
+ 此功能目前不适用于具有多个主节点的 EMR 集群或与 AWS Lake Formation集成的 EMR 集群。
+ 要启用一键式访问持久性应用程序用户界面，您必须有权对 Amazon EMR 执行 `CreatePersistentAppUI`、`DescribePersistentAppUI` 和 `GetPersistentAppUIPresignedURL` 操作。如果您拒绝 IAM 主体对这些操作的权限，则传播权限更改所需的时间大约为 5 分钟。
+ 如果某集群启用了运行时角色，则当通过 Persistent App UI 访问 Spark History Server 时，只有在运行时角色提交 Spark 作业后，用户才能访问 Spark 作业。
+ 如果某集群启用了运行时角色，则每个用户只能访问由同一用户身份和运行时角色提交的应用程序。
+  要针对启用了运行时角色的集群在持久性应用程序用户界面中查看所有应用程序，需要对 Amazon EMR 执行 `AccessAllEventLogs` 操作。
+ 如果在正在运行的集群中重新配置应用程序，则将无法通过应用程序 UI 获取应用程序历史记录。
+ 对于每个应用程序 AWS 账户，活动应用程序的默认限制 UIs 为 200。
+ 在下文中 AWS 区域，您可以通过 Amazon EMR 6.14.0 及更高版本 UIs 从控制台访问应用程序：
  + 亚太地区（雅加达）（ap-southeast-3）
  + 欧洲（西班牙）(eu-south-2)
  + 亚太地区（墨尔本）(ap-southeast-4)
  + 以色列（特拉维夫）（il-central-1）
  + 中东（阿联酋）(me-central-1)
+ 在下文中 AWS 区域，您可以通过 Amazon EMR 5.25.0 及更高版本 UIs 从控制台访问应用程序：
  + 美国东部（弗吉尼亚州北部）(us-east-1)
  + 美国西部（俄勒冈州）(us-west-2)
  + 亚太地区（孟买）(ap-south-1)
  + 亚太地区（首尔）(ap-northeast-2)
  + 亚太地区（新加坡）(ap-southeast-1)
  + 亚太地区（悉尼）(ap-southeast-2)
  + 亚太地区（东京）(ap-northeast-1)
  + 加拿大（中部）(ca-central-1)
  + 南美洲（圣保罗）（sa-east-1）
  + 欧洲地区（法兰克福）(eu-central-1)
  + 欧洲地区（爱尔兰）(eu-west-1)
  + 欧洲地区（伦敦）(eu-west-2)
  + 欧洲地区（巴黎）（eu-west-3）
  + 欧洲地区（斯德哥尔摩）(eu-north-1)
  + 中国（北京）（cn-north-1）
  + 中国（宁夏）（cn-northwest-1）