

# Apache Spark 웹 UI를 사용하여 작업 모니터링
<a name="monitor-spark-ui"></a>

Apache Spark 웹 UI를 사용하여 AWS Glue 작업 시스템에서 실행 중인 AWS Glue ETL 작업과 AWS Glue 개발 엔드포인트에서 실행 중인 Spark 애플리케이션을 모니터링하고 디버그할 수 있습니다. Spark UI를 사용하면 각 작업에 대해 다음을 확인할 수 있습니다.
+ 각 Spark 단계의 이벤트 타임라인
+ 작업의 방향성 비순환 그래프(DAG)
+ SparkSQL 쿼리에 대한 물리적, 논리적 계획
+ 각 작업에 대한 기본 Spark 환경 변수

Spark 웹 UI 사용에 대한 자세한 내용은 Spark 설명서의 [웹 UI](https://spark.apache.org/docs/3.3.0/web-ui.html)를 참조하십시오. Spark UI 결과를 해석하여 작업 성능을 개선하는 방법에 대한 지침은 AWS 권장 가이드의 [Apache Spark 용 AWS Glue 작업 성능 조정 모범 사례](https://docs.aws.amazon.com/prescriptive-guidance/latest/tuning-aws-glue-for-apache-spark/introduction.html)를 참조하세요.

 AWS Glue 콘솔에서 Spark UI를 확인할 수 있습니다. 이 기능은 AWS Glue 작업이 AWS Glue 3.0 이상 버전에서 실행되고 새로운 작업의 기본값인 레거시 형식이 아닌 표준 형식으로 생성된 로그가 있는 경우 사용할 수 있습니다. 로그 파일이 0.5GB를 초과하는 경우 AWS Glue 4.0 이상 버전에서 작업 실행에 대한 로그 롤링 지원을 활성화하여 로그 아카이브, 분석 및 문제 해결을 간소화할 수 있습니다.

AWS Glue 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 Spark UI를 활성화할 수 있습니다. Spark UI를 사용하면 AWS Glue 개발 엔드포인트의 AWS Glue ETL 작업과 Spark 애플리케이션은 Amazon Simple Storage Service(Amazon S3)에서 지정한 위치에 Spark 이벤트 로그를 백업할 수 있습니다. 작업이 작동 중일 때와 완료된 후 모두 실시간으로 Amazon S3에서 Spark UI를 통해 백업된 이벤트 로그를 사용할 수 있습니다. 로그가 Amazon S3에 남아 있는 동안 AWS Glue 콘솔의 Spark UI에서 해당 로그를 볼 수 있습니다.

## 권한
<a name="monitor-spark-ui-limitations-permissions"></a>

 AWS Glue 콘솔에서 Spark UI를 사용하려면 `UseGlueStudio`를 사용하거나 모든 개별 서비스 API를 추가할 수 있습니다. Spark UI를 완전히 사용하려면 모든 API가 필요하지만, 사용자는 세분화된 액세스를 위해 IAM 권한에 해당 서비스 API를 추가하여 SparkUI 기능에 액세스할 수 있습니다.

 `RequestLogParsing`은 로그 구문 분석을 수행하므로 가장 중요합니다. 나머지 API는 각각의 구문 분석된 데이터를 읽는 데 사용됩니다. 예를 들어 `GetStages`는 Spark 작업의 모든 단계에 대한 데이터에 액세스할 수 있습니다.

 `UseGlueStudio`에 매핑된 Spark UI 서비스 API 목록은 아래 샘플 정책에 나와 있습니다. 아래 정책은 Spark UI 기능만 사용할 수 있는 액세스 권한을 제공합니다. Amazon S3 및 IAM과 같은 권한을 더 추가하려면 [AWS Glue Studio에 대한 사용자 지정 IAM 정책 만들기](https://docs.aws.amazon.com/glue/latest/dg/getting-started-min-privs.html#getting-started-all-gs-privs.html)를 참조하세요.

 `UseGlueStudio`에 매핑된 Spark UI 서비스 API 목록은 아래 샘플 정책에 나와 있습니다. Spark UI 서비스 API를 사용할 때는 다음 네임스페이스를 사용하세요. `glue:<ServiceAPI>` 

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowGlueStudioSparkUI",
      "Effect": "Allow",
      "Action": [
        "glue:RequestLogParsing",
        "glue:GetLogParsingStatus",
        "glue:GetEnvironment",
        "glue:GetJobs",
        "glue:GetJob",
        "glue:GetStage",
        "glue:GetStages",
        "glue:GetStageFiles",
        "glue:BatchGetStageFiles",
        "glue:GetStageAttempt",
        "glue:GetStageAttemptTaskList",
        "glue:GetStageAttemptTaskSummary",
        "glue:GetExecutors",
        "glue:GetExecutorsThreads",
        "glue:GetStorage",
        "glue:GetStorageUnit",
        "glue:GetQueries",
        "glue:GetQuery"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

## 제한 사항
<a name="monitor-spark-ui-limitations"></a>
+ AWS Glue 콘솔의 Spark UI는 레거시 로그 형식이므로 2023년 11월 20일 이전에 발생한 작업 실행에는 사용할 수 없습니다.
+  AWS Glue 콘솔의 Spark UI는 스트리밍 작업에서 기본적으로 생성되는 로그와 같이 AWS Glue 4.0에 대한 로그 롤링을 지원합니다. 생성된 모든 롤링된 로그 이벤트 파일의 최대 합계는 2GB입니다. 롤링된 로그를 지원하지 않는 AWS Glue 작업의 경우 SparkUI에 대해 지원되는 최대 로그 이벤트 파일 크기는 0.5GB입니다.
+  VPC에서만 액세스할 수 있는 Amazon S3 버킷에 저장된 Spark 이벤트 로그에 대해서는 서버리스 Spark UI를 사용할 수 없습니다.

## 예: Apache Spark 웹 UI
<a name="monitor-spark-ui-limitations-example"></a>

이 예제에서는 Spark UI를 사용하여 작업 성과를 이해하는 방법을 보여줍니다. 스크린샷은 자체 관리형 Spark 기록 서버에서 제공하는 Spark 웹 UI를 보여줍니다. AWS Glue 콘솔의 Spark UI에서도 비슷한 화면을 볼 수 있습니다. Spark 웹 UI 사용에 대한 자세한 내용은 Spark 설명서의 [웹 UI](https://spark.apache.org/docs/3.3.0/web-ui.html)를 참조하십시오.

다음은 Spark 애플리케이션에서 두 데이터 소스의 데이터를 읽고 조인 변환을 수행하여 Parquet 형식으로 Amazon S3에 쓰는 예제입니다.

```
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from pyspark.sql.functions import count, when, expr, col, sum, isnull
from pyspark.sql.functions import countDistinct
from awsglue.dynamicframe import DynamicFrame
 
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
 
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
 
job = Job(glueContext)
job.init(args['JOB_NAME'])
 
df_persons = spark.read.json("s3://awsglue-datasets/examples/us-legislators/all/persons.json")
df_memberships = spark.read.json("s3://awsglue-datasets/examples/us-legislators/all/memberships.json")
 
df_joined = df_persons.join(df_memberships, df_persons.id == df_memberships.person_id, 'fullouter')
df_joined.write.parquet("s3://aws-glue-demo-sparkui/output/")
 
job.commit()
```

다음 DAG 시각화는 이 Spark 작업의 여러 단계를 보여줍니다.

![\[작업 0의 완료된 2단계를 보여주는 Spark UI의 스크린샷.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/spark-ui1.png)


작업에 대한 다음 이벤트 타임라인은 다양한 Spark 실행기의 시작, 실행 및 종료를 보여줍니다.

![\[다양 Spark 실행기의 완료, 실패 및 활성 단계를 보여주는 Spark UI의 스크린샷.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/spark-ui2.png)


다음 화면은 SparkSQL 쿼리 계획의 세부 정보를 보여줍니다.
+ 구문 분석된 논리적 계획
+ 분석된 논리적 계획
+ 최적화된 논리적 계획
+ 실행할 물리적 계획

![\[SparkSQL 쿼리 계획 : 구문 분석, 분석 및 최적화된 논리적 계획과 실행할 물리적 계획.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/spark-ui3.png)


**Topics**
+ [권한](#monitor-spark-ui-limitations-permissions)
+ [제한 사항](#monitor-spark-ui-limitations)
+ [예: Apache Spark 웹 UI](#monitor-spark-ui-limitations-example)
+ [AWS Glue 작업을 위한 Apache Spark 웹 UI 사용 설정](monitor-spark-ui-jobs.md)
+ [Spark 기록 서버 시작](monitor-spark-ui-history.md)

# AWS Glue 작업을 위한 Apache Spark 웹 UI 사용 설정
<a name="monitor-spark-ui-jobs"></a>

Apache Spark 웹 UI를 사용하여 AWS Glue 작업 시스템에서 실행 중인 AWS Glue ETL 작업을 모니터링하고 디버그할 수 있습니다. AWS Glue 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 Spark UI를 구성할 수 있습니다.

30초마다 AWS Glue가 Spark 이벤트 로그를 지정한 Amazon S3 경로로 백업합니다.

**Topics**
+ [Spark UI 구성(콘솔)](#monitor-spark-ui-jobs-console)
+ [Spark UI 구성(AWS CLI)](#monitor-spark-ui-jobs-cli)
+ [노트북을 사용하여 세션에 대한 Spark UI 구성](#monitor-spark-ui-sessions)
+ [롤링 로그 활성화](#monitor-spark-ui-rolling-logs)

## Spark UI 구성(콘솔)
<a name="monitor-spark-ui-jobs-console"></a>

AWS Management Console을 사용하여 Spark UI를 구성하려면 다음 단계를 따르세요. AWS Glue 작업을 생성할 때 Spark UI는 기본으로 활성화됩니다.

**작업을 생성하거나 편집할 때 Spark UI를 켜려면**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 엽니다.

1. 탐색 창에서, **작업**을 선택합니다.

1. **작업 추가**를 선택하거나 기존 작업을 선택합니다.

1. **작업 세부 정보**에서 **고급 속성**을 엽니다.

1. **Spark UI** 탭에서 **Amazon S3에 Spark UI 로그 쓰기**를 선택합니다.

1. 작업의 Spark 이벤트 로그를 저장할 Amazon S3 경로를 지정합니다. 작업에서 보안 구성을 사용하는 경우 암호화는 Spark UI 로그 파일에도 적용됩니다. 자세한 내용은 [AWS Glue에서 작성한 데이터 암호화](encryption-security-configuration.md) 섹션을 참조하세요.

1. **Spark UI 로깅 및 모니터링** 구성에서:
   + AWS Glue 콘솔에서 볼 로그를 생성하는 경우 **표준**을 선택합니다.
   + Spark 기록 서버에서 볼 로그를 생성하는 경우 **레거시**를 선택합니다.
   + 둘 다 생성하도록 선택할 수도 있습니다.

## Spark UI 구성(AWS CLI)
<a name="monitor-spark-ui-jobs-cli"></a>

AWS CLI를 사용하여 AWS Glue 콘솔에서 Spark UI로 볼 로그를 생성하려면 다음 작업 파라미터를 AWS Glue 작업에 전달합니다. 자세한 내용은 [AWS Glue 작업에서 작업 파라미터 사용](aws-glue-programming-etl-glue-arguments.md) 섹션을 참조하세요.

```
'--enable-spark-ui': 'true',
'--spark-event-logs-path': 's3://s3-event-log-path'
```

기존 위치에 로그를 배포하려면 `--enable-spark-ui-legacy-path` 파라미터를 `"true"`로 설정합니다. 두 가지 형식으로 로그를 생성하지 않으려면 `--enable-spark-ui` 매개변수를 제거하십시오.

## 노트북을 사용하여 세션에 대한 Spark UI 구성
<a name="monitor-spark-ui-sessions"></a>

**주의**  
AWS Glue 대화형 세션은 현재 콘솔의 Spark UI를 지원하지 않습니다. Spark 기록 서버를 구성합니다.

 AWS Glue 노트북을 사용하는 경우 세션을 시작하기 전에 SparkUI 구성을 설정합니다. 이렇게 하려면 `%%configure` 셀 매직을 사용합니다.

```
%%configure { “--enable-spark-ui”: “true”, “--spark-event-logs-path”: “s3://path” }
```

## 롤링 로그 활성화
<a name="monitor-spark-ui-rolling-logs"></a>

 AWS Glue 작업에 SparkUI 및 로그 이벤트 파일 롤링을 활성화하면 다음과 같은 몇 가지 이점이 있습니다.
+  로그 이벤트 파일 롤링 - 로그 이벤트 파일 롤링이 활성화된 상태에서 AWS Glue는 작업 실행의 각 단계에 대해 별도의 로그 파일을 생성하므로 특정 단계 또는 변환과 관련된 문제를 쉽게 식별하고 해결할 수 있습니다.
+  더 나은 로그 관리 - 로그 이벤트 파일을 롤링하면 로그 파일을 더 효율적으로 관리하는 데 도움이 됩니다. 잠재적으로 큰 단일 로그 파일을 보유하는 대신, 작업 실행 단계에 따라 더 작고 관리 가능한 파일로 로그가 분할됩니다. 이렇게 하면 로그 아카이빙, 분석 및 문제 해결을 간소화할 수 있습니다.
+  내결함성 개선 - AWS Glue 작업이 실패하거나 중단되는 경우 로그 이벤트 파일 롤링은 마지막 성공 단계에 대한 중요한 정보를 제공할 수 있으므로 처음부터 시작하는 대신 해당 시점부터 작업을 더 쉽게 재개할 수 있습니다.
+  비용 최적화 - 로그 이벤트 파일 롤링을 활성화하면 로그 파일과 관련된 스토리지 비용을 절감할 수 있습니다. 잠재적으로 큰 단일 로그 파일을 저장하는 대신 더 작고 관리 가능한 로그 파일을 저장합니다. 특히 장기 실행 또는 복잡한 작업의 경우 더 비용 효율적일 수 있습니다.

 새 환경에서 사용자는 다음을 통해 로그 롤링을 명시적으로 활성화할 수 있습니다.

```
'—conf': 'spark.eventLog.rolling.enabled=true'
```

or

```
'—conf': 'spark.eventLog.rolling.enabled=true —conf 
spark.eventLog.rolling.maxFileSize=128m'
```

 로그 롤링이 활성화된 경우 `spark.eventLog.rolling.maxFileSize`에서는 롤오버하기 전 이벤트 로그 파일의 최대 크기를 지정합니다. 지정하지 않으면 이 선택적 파라미터의 기본값은 128MB입니다. 최소 10MB입니다.

 생성된 모든 롤링된 로그 이벤트 파일의 최대 합계는 2GB입니다. 로그 롤링을 지원하지 않는 AWS Glue 작업의 경우 SparkUI에 대해 지원되는 최대 로그 이벤트 파일 크기는 0.5GB입니다.

추가 구성을 전달하여 스트리밍 작업에 대한 롤링 로그를 끌 수 있습니다. 로그 파일이 매우 크면 유지 관리 비용이 많이 들 수 있습니다.

롤링 로그를 끄려면 다음 구성을 제공하십시오.

```
'--spark-ui-event-logs-path': 'true',
'--conf': 'spark.eventLog.rolling.enabled=false'
```

# Spark 기록 서버 시작
<a name="monitor-spark-ui-history"></a>

Spark 기록 서버를 사용하여 자체 인프라에서 Spark 로그를 시각화할 수 있습니다. AWS Glue 콘솔에서는 AWS Glue 4.0 이상 버전의 AWS Glue 작업 실행에 대한 동일한 시각화를 레거시 형식이 아닌 표준 형식으로 생성된 로그와 함께 볼 수 있습니다. 자세한 내용은 [Apache Spark 웹 UI를 사용하여 작업 모니터링](monitor-spark-ui.md) 섹션을 참조하세요.

EC2 인스턴스에서 서버를 호스팅하는 AWS CloudFormation 템플릿을 사용하여 Spark 기록 서버를 시작하거나 Docker를 사용하여 로컬로 시작할 수 있습니다.

**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 웹 UI를 볼 수 있습니다. 이 템플릿은 요구 사항에 맞게 수정해야 하는 샘플입니다.

**CloudFormation을 사용하여 Spark History Server를 시작하고 Spark UI를 보려면**

1. 다음 표에서 **스택 시작** 버튼 중 하나를 선택하십시오. 그러면 CloudFormation 콘솔에서 스택이 시작됩니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/monitor-spark-ui-history.html)

1. **Specify template(템플릿 지정)** 페이지에서 **다음**을 선택합니다.

1. **스택 세부 정보 지정** 페이지에서 **스택 이름**을 입력합니다. **파라미터(Parameters)** 아래에 추가 정보를 입력합니다.

   1. 

**Spark UI 구성**

      다음 정보를 제공합니다.
      + [**IP 주소 범위(IP address range)**] - Spark UI를 보는 데 사용할 수 있는 IP 주소 범위입니다. 특정 IP 주소 범위의 액세스를 제한하려면 사용자 지정 값을 사용해야 합니다.
      + [**기록 서버 포트(History server port)**] - Spark UI의 포트입니다. 기본값을 사용할 수 있습니다.
      + [**이벤트 로그 디렉터리(Event log directory)**] - AWS Glue 작업 또는 개발 엔드포인트에서 Spark 이벤트 로그가 저장되는 위치를 선택합니다. 이벤트 로그 경로 체계에 **s3a://**를 사용해야 합니다.
      + [**Spark 패키지 위치(Spark package location)**] - 기본값을 사용할 수 있습니다.
      + [**키 스토어 경로(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 비용이 청구됩니다.
      + [**최신 AMI ID(Latest AMI ID)**] - Spark 기록 서버 인스턴스에 대한 Amazon Linux 2의 AMI ID입니다. 기본값을 사용할 수 있습니다.
      + [**VPC ID**] - Spark 기록 서버 인스턴스의 Virtual Private Cloud(VPC) ID입니다. 계정에 제공된 모든 VPC를 사용할 수 있습니다. [기본 네트워크 ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#default-network-acl)과 함께 기본 VPC를 사용하지 않는 것이 좋습니다. 자세한 내용은 *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)을 참조하세요.
      + [**서브넷 ID(Subnet ID)**] - Spark 기록 서버 인스턴스의 ID입니다. VPC의 모든 서브넷을 사용할 수 있습니다. 클라이언트에서 서브넷으로 네트워크에 도달할 수 있어야 합니다. 인터넷을 통해 액세스하려면 라우팅 테이블에 인터넷 게이트웨이가 있는 퍼블릭 서브넷을 사용해야 합니다.

   1. **다음**을 선택합니다.

1. **스택 옵션 구성(Configure stack options)** 페이지에서 현재 사용자 자격 증명을 사용하여 CloudFormation이 스택의 리소스를 생성, 수정 또는 삭제하는 방식을 확인하려면 **다음(Next)**을 선택합니다. **권한** 섹션에서 현재 사용자 권한 대신 사용할 역할을 지정하고 **다음**을 선택할 수도 있습니다.

1. **검토** 페이지에서 설정을 확인합니다.

   **CloudFormation에서 IAM 리소스를 생성할 수 있음을 승인합니다**를 선택하고 **스택 생성**을 선택합니다.

1. 스택이 생성되기를 기다립니다.

1. **출력** 탭을 클릭합니다.

   1. 퍼블릭 서브넷을 사용하는 경우 **SparkUiPublicUrl**의 URL을 복사하십시오.

   1. 프라이빗 서브넷을 사용하는 경우 **SparkUiPrivateUrl**의 URL을 복사하십시오.

1. 웹 브라우저를 열고 URL에 붙여 넣습니다. 지정된 포트에서 HTTPS를 사용하여 서버에 액세스할 수 있습니다. 브라우저가 서버 인증을 인식하지 못할 수 있어 서버 보호를 재정의하여 실행해야 합니다.

## Docker를 사용하여 Spark 기록 서버 시작 및 Spark UI 보기
<a name="monitor-spark-ui-history-local"></a>

로컬 액세스를 선호하는 경우(Apache Spark 기록 서버에 EC2 인스턴스가 없는 경우) Docker를 사용하여 Apache Spark 기록 서버를 시작하고 Spark UI를 로컬로 볼 수도 있습니다. 이 Dockerfile은 요구 사항에 맞게 수정해야 하는 샘플입니다.

 **사전 조건** 

노트북에 도커를 설치하는 방법에 대한 자세한 내용은 [Docker Engine community](https://docs.docker.com/install/)를 참조하십시오.

**Docker를 사용하여 로컬로 Spark History Server를 시작하고 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를 봅니다.