

# 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를 봅니다.