

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

# 在 Amazon EMR 中檢視持久性應用程式使用者介面
<a name="app-history-spark-UI"></a>

從 Amazon EMR 5.25.0 版開始，使用主控台中的叢集**摘要**頁面或**應用程式使用者介面**索引標籤，可連接至託管在叢集外的持續性 Spark 歷史記錄伺服器應用程式詳細資訊。Tez UI 和 YARN Timeline Server 持續應用程式介面從 Amazon EMR 5.30.1 版開始提供。持續應用程式歷程記錄的一鍵式存取功能具有下列優點：
+ 您可以快速分析作用中的任務與任務歷程記錄，並進行疑難排解，而不必透過 SSH 連線設定 Web 代理。
+ 您可以存取作用中和已終止叢集的應用程式歷程記錄和相關日誌檔案。這些日誌會在應用程式結束後保留 30 天。

在主控台中導覽至叢集詳細資訊，然後選取**應用程式**索引標籤。叢集啟動後，選取您想要的應用程式使用者介面。應用程式使用者介面會在新的瀏覽器索引標籤中開啟。如需詳細資訊，請參閱[監控和檢測](https://spark.apache.org/docs/latest/monitoring.html)。

您可以透過 Spark 歷程記錄伺服器、YARN 時間軸伺服器和 Tez UI 上的連結來檢視 YARN 容器日誌。

**注意**  
若要從 Spark 歷史記錄伺服器、YARN Timeline Server 和 Tez UI 中存取 YARN 容器日誌，必須為叢集啟用登入 Amazon S3 的功能。若未啟用日誌記錄功能，則無法使用 YARN 容器日誌的連結。

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

為了啟用持續應用程式使用者介面的一鍵式存取功能，Amazon EMR 會收集兩種類型的日誌：
+ **Application event logs (應用程式事件日誌)** 會收集到 EMR 系統儲存貯體中。事件日誌的靜態加密是使用伺服器端的加密搭配 Amazon S3 受管金鑰 (SSE-S3)。如果您為叢集使用私有子網路，請務必在私有子網路的 Amazon S3 政策資源清單中包含正確的系統儲存貯體 ARNs。如需詳細資訊，請參閱[私有子網路的 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 Timeline Server 事件日誌收集到 EMR 系統儲存貯體中。**Application user interfaces (應用程式使用者界面)** 索引標籤不會顯示任何應用程式使用者界面資訊，而且您將無法從主控台存取所有應用程式使用者界面。

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

在某些情況下，長時間執行的 Spark 作業 (例如 Spark 串流) 和大型作業 (例如 Spark SQL 查詢) 可產生大型事件日誌。使用大型事件日誌，可以快速耗盡運算執行個體上的磁碟空間，並在載入持續性 UI 時遇到 `OutOfMemory` 錯誤。為避免這些問題，建議您開啟 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 叢集。
+ 若要啟用持續應用程式使用者介面的一鍵式存取，您必須擁有 的許可`CreatePersistentAppUI`，`DescribePersistentAppUI`以及 Amazon EMR `GetPersistentAppUIPresignedURL`的動作。如果您拒絕 IAM 主體對這些動作的許可，則需要大約五分鐘的時間才能傳播許可變更。
+ 如果叢集是啟用執行時間角色的叢集，則從持久性應用程式 UI 存取 Spark 歷史記錄伺服器時，使用者只有在執行時間角色提交 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)