

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon EMR에서 영구 애플리케이션 사용자 인터페이스 보기
<a name="app-history-spark-UI"></a>

Amazon EMR 버전 5.25.0부터 콘솔의 클러스터 **요약 페이지** 또는 **애플리케이션 사용자 인터페이스** 탭을 사용하여 클러스터 외부에 호스팅된 영구 Spark 기록 서버 애플리케이션 세부 정보에 연결할 수 있습니다. Tez UI 및 YARN 타임라인 서버 영구 애플리케이션 인터페이스는 Amazon EMR 버전 5.30.1부터 사용할 수 있습니다. 영구 애플리케이션 이력에 대한 원클릭 링크 액세스는 다음과 같은 이점을 제공합니다.
+ SSH 연결을 통해 웹 프록시를 설정하지 않고도 활성 작업 및 작업 기록을 신속하게 분석하고 문제를 해결할 수 있습니다.
+ 활성 클러스터와 종료된 클러스터에 대한 애플리케이션 이력 및 관련 로그 파일에 액세스할 수 있습니다. 로그는 애플리케이션이 종료된 후 30일 동안 사용할 수 있습니다.

콘솔의 클러스터 세부 정보로 이동한 다음 **애플리케이션** 탭을 선택합니다. 클러스터가 시작되고 나면 원하는 애플리케이션 UI를 선택합니다. 애플리케이션 UI가 새 브라우저 탭에서 열립니다. 자세한 내용은 [Monitoring and instrumentation](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)를 사용해 암호화됩니다. 클러스터에 대해 프라이빗 서브넷을 사용하는 경우 프라이빗 서브넷에 대한 Amazon S3 정책의 리소스 목록에 올바른 시스템 버킷 ARN을 포함해야 합니다. 자세한 내용은 [프라이빗 서브넷에 대한 최소 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 쿼리와 같은 대형 작업은 큰 이벤트 로그를 생성할 수 있습니다. 이벤트 로그가 크면 컴퓨팅 인스턴스의 디스크 공간이 빠르게 소진되고 영구 UI를 로드할 때 `OutOfMemory` 오류가 발생할 수 있습니다. 이러한 문제를 방지하려면 Spark 이벤트 로그 롤링 및 압축 기능을 켜는 것이 좋습니다. 이 기능은 Amazon EMR 버전 emr-6.1.0 이상에서 사용할 수 있습니다. 롤링 및 압축에 대한 자세한 내용은 Spark 설명서에서 [Applying compaction on rolling event log files](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` - 롤링이 활성화된 경우 롤오버하기 전 이벤트 로그 파일의 최대 크기를 지정합니다. 기본값은 128MB입니다.
+ `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에 애플리케이션 세부 정보가 표시될 때까지 최소 2분 정도 지연될 수 있습니다.
+ 이 기능은 애플리케이션의 이벤트 로그 디렉터리가 HDFS에 있는 경우에만 작동합니다. 기본적으로 Amazon EMR은 HDFS의 디렉터리에 이벤트 로그를 저장합니다. 기본 디렉터리를 다른 파일 시스템(예: Amazon S3)으로 변경하면 이 기능이 작동하지 않습니다.
+ 여러 개의 마스터 노드가 있는 EMR 클러스터 또는 AWS Lake Formation과 통합된 EMR 클러스터에는 현재 이 기능을 사용할 수 없습니다.
+ 영구 애플리케이션 사용자 인터페이스에 대한 원클릭 액세스를 활성화하려면 Amazon EMR에 대한 `CreatePersistentAppUI`, `DescribePersistentAppUI` 및 `GetPersistentAppUIPresignedURL` 작업의 권한이 있어야 합니다. 이러한 작업에 대한 IAM 보안 주체의 권한을 거부하면 권한 변경을 전파하는 데 약 5분 정도 걸립니다.
+ 클러스터가 런타임 역할이 활성화된 클러스터인 경우 영구 앱 UI에서 Spark 기록 서버에 액세스할 때 사용자는 런타임 역할이 Spark 작업을 제출한 경우에만 Spark 작업에 액세스할 수 있습니다.
+ 클러스터가 런타임 역할이 활성화된 클러스터인 경우 각 사용자는 동일한 사용자 자격 증명 및 런타임 역할이 제출한 애플리케이션에만 액세스할 수 있습니다.
+  Amazon EMR의 `AccessAllEventLogs` 작업은 런타임 역할이 활성화된 클러스터에 대한 영구 애플리케이션 사용자 인터페이스의 모든 애플리케이션을 보는 데 필요합니다.
+ 실행 중인 클러스터에서 애플리케이션을 다시 구성하면 애플리케이션 UI를 통해서는 애플리케이션 이력을 사용할 수 없습니다.
+ 각 활성 애플리케이션 UI AWS 계정의 기본 제한은 200입니다. UIs 
+ 다음에서 Amazon EMR 6.14.0 이상을 사용하여 콘솔에서 애플리케이션 UIs에 액세스할 AWS 리전수 있습니다.
  + 아시아 태평양(자카르타) (ap-southeast-3)
  + 유럽(스페인)(eu-south-2)
  + 아시아 태평양(멜버른)(ap-southeast-4)
  + 이스라엘(텔아비브)(il-central-1)
  + 중동(UAE)(me-central-1)
+ 다음에서 Amazon EMR 5.25.0 이상을 사용하여 콘솔에서 애플리케이션 UIs에 액세스할 AWS 리전수 있습니다.
  + 미국 동부(버지니아 북부)(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)