

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

# Amazon EMR Serverless 시작하기
<a name="getting-started"></a>

이 자습서는 샘플 Spark 또는 Hive 워크로드를 배포하는 경우 EMR Serverless를 시작하는 데 도움이 됩니다. 자체 애플리케이션을 생성, 실행 및 디버깅합니다. 이 자습서의 대부분에 나오는 기본 옵션을 표시합니다.

EMR Serverless 애플리케이션을 시작하기 전에 먼저 다음 태스크를 완료합니다.

**Topics**
+ [EMR Serverless를 사용할 수 있는 권한 부여](#gs-permissions)
+ [EMR Serverless에 대한 스토리지 준비](#gs-prepare-storage)
+ [대화형 워크로드를 실행하도록 EMR Studio 생성](#gs-interactive)
+ [작업 런타임 역할 생성](#gs-runtime-role)
+ [콘솔에서 Amazon Redshift Serverless 시작하기](gs-console.md)
+ [에서 시작하기 AWS CLI](gs-cli.md)

## EMR Serverless를 사용할 수 있는 권한 부여
<a name="gs-permissions"></a>

EMR Serverless를 사용하려면 EMR Serverless에 대한 권한을 부여하는 정책이 연결된 사용자 또는 IAM 역할이 필요합니다. 사용자를 생성하고 해당 사용자에게 적절한 정책을 연결하려면 [권한 부여](setting-up.md#setting-up-iam)의 지침을 수행합니다.

## EMR Serverless에 대한 스토리지 준비
<a name="gs-prepare-storage"></a>

이 자습서에서는 S3 버킷을 사용하여 EMR Serverless 애플리케이션을 사용해 실행할 샘플 Spark 또는 Hive 워크로드의 출력 파일 및 로그를 저장합니다. 버킷을 생성하려면 Amazon Simple Storage Service 콘솔 사용 설명서의 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)에 나온 지침을 따르세요.** `amzn-s3-demo-bucket`에 대한 추가 참조를 새로 생성된 버킷의 이름으로 바꿉니다.

## 대화형 워크로드를 실행하도록 EMR Studio 생성
<a name="gs-interactive"></a>

EMR Serverless를 사용하여 EMR Studio에서 호스팅되는 노트북을 통해 대화형 쿼리를 실행하려면 S3 버킷 및 [EMR Serverless에 대한 최소 서비스 역할](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-service-role.html#emr-studio-service-role-serverless) 지정하여 워크스페이스를 생성해야 합니다. 설정 단계는 **Amazon EMR 관리 안내서의 [EMR Studio 설정](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-set-up.html)을 참조하세요. 대화형 워크로드에 대한 자세한 내용은 [EMR Studio를 통해 EMR Serverless에서 대화형 워크로드 실행](interactive-workloads.md) 섹션을 참조하세요.

## 작업 런타임 역할 생성
<a name="gs-runtime-role"></a>

EMR Serverless에서 실행되는 작업은 런타임 시 특정 AWS 서비스 및 리소스에 대한 세분화된 권한을 제공하는 런타임 역할을 사용합니다. 이 자습서에서는 퍼블릭 S3 버킷에서 데이터 및 스크립트를 호스팅합니다. `amzn-s3-demo-bucket` 버킷은 출력을 저장합니다.

작업 런타임 역할을 설정하려면 먼저 EMR Serverless에서 새 역할을 사용할 수 있도록 신뢰 정책을 사용하여 런타임 역할을 생성합니다. 그런 다음, 필요한 S3 액세스 정책을 해당 역할에 연결합니다. 다음 단계에서 프로세스를 안내합니다.

------
#### [ Console ]

1. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔로 이동합니다.

1. 왼쪽 탐색 창에서 **정책**을 선택합니다.

1. **정책 생성**을 선택하세요.

1. **정책 생성** 페이지가 새 탭에서 열립니다. **정책 편집기**를 Json으로 선택하고 아래에 정책 JSON을 붙여넣습니다.
**중요**  
아래 정책에서 `amzn-s3-demo-bucket`을 [EMR Serverless에 대한 스토리지 준비](#gs-prepare-storage)에서 생성한 실제 버킷 이름으로 바꿉니다. S3 액세스에 대한 기본 정책입니다. 추가 작업 런타임 역할 예제는 [Amazon EMR Serverless에 대한 작업 런타임 역할](security-iam-runtime-role.md) 섹션을 참조하세요.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ReadAccessForEMRSamples",
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket"
         ],
         "Resource": [
           "arn:aws:s3:::*.elasticmapreduce",
           "arn:aws:s3:::*.elasticmapreduce/*"
         ]
       },
       {
         "Sid": "FullAccessToOutputBucket",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:ListBucket",
           "s3:DeleteObject"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket",
           "arn:aws:s3:::amzn-s3-demo-bucket/*"
         ]
       },
       {
         "Sid": "GlueCreateAndReadDataCatalog",
         "Effect": "Allow",
         "Action": [
           "glue:GetDatabase",
           "glue:CreateDatabase",
           "glue:GetDataBases",
           "glue:CreateTable",
           "glue:GetTable",
           "glue:UpdateTable",
           "glue:DeleteTable",
           "glue:GetTables",
           "glue:GetPartition",
           "glue:GetPartitions",
           "glue:CreatePartition",
           "glue:BatchCreatePartition",
           "glue:GetUserDefinedFunctions"
         ],
         "Resource": [
           "*"
         ]
       }
     ]
   }
   ```

------

1. **다음**을 선택하여 정책의 이름(예: `EMRServerlessS3AndGlueAccessPolicy` 및 **정책 만들기**)을 입력합니다.

1. IAM 콘솔의 왼쪽 탐색 창에서 **역할**을 선택합니다.

1. **역할 생성**을 선택합니다.

1. 역할 유형에서 **사용자 지정 신뢰 정책**을 선택하고 다음 신뢰 정책을 붙여넣습니다. 이렇게 하면 Amazon EMR Serverless 애플리케이션에 제출된 작업이 사용자를 대신하여 다른 AWS 서비스 에 액세스할 수 있습니다.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "sts:AssumeRole"
         ],
         "Resource": "arn:aws:iam::123456789012:role/EMRServerlessExecutionRole",
         "Sid": "AllowSTSAssumerole"
       }
     ]
   }
   ```

------

1. **다음**을 선택하여 **권한 추가** 페이지로 이동한 다음, **EMRServerlessS3AndGlueAccessPolicy**를 선택합니다.

1. **이름, 검토 및 생성** 페이지의 **역할 이름**에서 역할 이름(예: `EMRServerlessS3RuntimeRole`)을 입력합니다. 새 IAM 역할을 생성하려면 **역할 생성**을 선택합니다.

------
#### [ CLI ]

1. IAM 역할에 사용할 신뢰 정책이 포함된 `emr-serverless-trust-policy.json`이라는 이름의 파일을 생성합니다. 파일에 다음 정책을 포함해야 합니다.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "EMRServerlessTrustPolicy",
         "Action": [
           "sts:AssumeRole"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:iam::123456789012:role/EMRServerlessExecutionRole"
       }
     ]
   }
   ```

------

1. `EMRServerlessS3RuntimeRole`라는 IAM 역할을 생성합니다. 이전 단계에서 생성한 신뢰 정책을 사용합니다.

   ```
   aws iam create-role \
       --role-name EMRServerlessS3RuntimeRole \
       --assume-role-policy-document file://emr-serverless-trust-policy.json
   ```

   출력에서 ARN을 기록합니다. 작업 제출 중에 새 역할의 ARN을 사용하고, 이후 이를 `job-role-arn`으로 참조합니다.

1. 워크로드에 대한 IAM 정책을 정의하는 `emr-sample-access-policy.json` 파일을 생성합니다. 그러면 퍼블릭 S3 버킷에 저장된 스크립트 및 데이터에 대한 읽기 액세스와 `amzn-s3-demo-bucket`에 대한 읽기-쓰기 액세스를 제공합니다.
**중요**  
아래 정책에서 `amzn-s3-demo-bucket`을 [EMR Serverless에 대한 스토리지 준비](#gs-prepare-storage)에서 생성한 실제 버킷 이름으로 바꿉니다. 이는 AWS Glue 및 S3 액세스에 대한 기본 정책입니다. 추가 작업 런타임 역할 예제는 [Amazon EMR Serverless에 대한 작업 런타임 역할](security-iam-runtime-role.md) 섹션을 참조하세요.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ReadAccessForEMRSamples",
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket"
         ],
         "Resource": [
           "arn:aws:s3:::*.elasticmapreduce",
           "arn:aws:s3:::*.elasticmapreduce/*"
         ]
       },
       {
         "Sid": "FullAccessToOutputBucket",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:ListBucket",
           "s3:DeleteObject"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket",
           "arn:aws:s3:::amzn-s3-demo-bucket/*"
         ]
       },
       {
         "Sid": "GlueCreateAndReadDataCatalog",
         "Effect": "Allow",
         "Action": [
           "glue:GetDatabase",
           "glue:CreateDatabase",
           "glue:GetDataBases",
           "glue:CreateTable",
           "glue:GetTable",
           "glue:UpdateTable",
           "glue:DeleteTable",
           "glue:GetTables",
           "glue:GetPartition",
           "glue:GetPartitions",
           "glue:CreatePartition",
           "glue:BatchCreatePartition",
           "glue:GetUserDefinedFunctions"
         ],
         "Resource": [
           "*"
         ]
       }
     ]
   }
   ```

------

1. **3단계**에서 생성한 정책 파일을 사용하여 IAM 정책 `EMRServerlessS3AndGlueAccessPolicy`를 생성합니다. 다음 단계에서 새 정책의 ARN을 사용하므로 출력에서 ARN을 기록합니다.

   ```
   aws iam create-policy \
       --policy-name EMRServerlessS3AndGlueAccessPolicy \
       --policy-document file://emr-sample-access-policy.json
   ```

   출력에서 새 정책의 ARN을 기록합니다. 다음 단계에서 `policy-arn`을 대체합니다.

1. IAM 정책 `EMRServerlessS3AndGlueAccessPolicy`를 작업 런타임 역할 `EMRServerlessS3RuntimeRole`에 연결합니다.

   ```
   aws iam attach-role-policy \
       --role-name EMRServerlessS3RuntimeRole \
       --policy-arn policy-arn
   ```

------

# 콘솔에서 Amazon Redshift Serverless 시작하기
<a name="gs-console"></a>

이 섹션에서는 EMR Studio 생성을 포함하여 EMR Serverless 작업을 설명합니다. 또한 작업 실행을 제출하고 로그를 보는 방법도 설명합니다.

**Topics**
+ [1단계: EMR Serverless 애플리케이션 생성](#gs-application-console)
+ [2단계: 작업 실행 또는 대화형 워크로드 제출](#gs-job-run-console)
+ [3단계: 애플리케이션 UI 및 로그 보기](#gs-output-console)
+ [4단계: 정리](#gs-cleanup-console)

## 1단계: EMR Serverless 애플리케이션 생성
<a name="gs-application-console"></a>

다음과 같이 EMR Serverless를 사용하여 새 애플리케이션을 생성합니다.

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) Amazon EMR 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **EMR Serverless**를 선택하여 EMR Serverless 랜딩 페이지로 이동합니다.

1. EMR Serverless애플리케이션을 생성하거나 관리하려면 EMR Studio UI가 필요합니다.
   + 애플리케이션을 생성하려는 AWS 리전 에 EMR Studio가 이미 있는 경우 **애플리케이션 관리를** 선택하여 EMR Studio로 이동하거나 사용할 스튜디오를 선택합니다.
   + 애플리케이션을 생성하려는에 EMR Studio AWS 리전 가 없는 경우 **시작하기**를 선택한 다음 **Studio 생성 및 시작**을 선택합니다. EMR Serverless는 애플리케이션을 생성하고 관리할 수 있도록 EMR Studio를 생성합니다.

1. 새 탭에서 열리는 **Studio 생성** UI에 애플리케이션의 이름, 유형 및 릴리스 버전을 입력합니다. 배치 작업만 실행하려면 **배치 작업에만 기본 설정 사용**을 선택합니다. 대화형 워크로드의 경우 **대화형 워크로드에 대한 기본 설정 사용**을 선택합니다. 이 옵션을 사용하여 대화형 지원 애플리케이션에서 배치 작업을 실행할 수도 있습니다. 필요한 경우 나중에 이러한 설정을 변경할 수 있습니다.

   자세한 내용은 [Studio 생성](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-create-studio.html)을 참조하세요.

1. **애플리케이션 생성**을 선택하여 첫 번째 애플리케이션을 생성합니다.

작업 실행 또는 대화형 워크로드를 제출하려면 다음 섹션([2단계: 작업 실행 또는 대화형 워크로드 제출](#gs-job-run-console))으로 계속 진행합니다.

## 2단계: 작업 실행 또는 대화형 워크로드 제출
<a name="gs-job-run-console"></a>

------
#### [ Spark job run ]

이 자습서에서는 PySpark 스크립트를 사용하여 여러 텍스트 파일에서 고유한 단어가 발생하는 횟수를 계산합니다. 퍼블릭 읽기 전용 S3 버킷은 스크립트 및 데이터세트를 모두 저장합니다.

**Spark 작업을 실행하는 방법**

1. 다음 명령을 사용하여 샘플 스크립트 `wordcount.py`를 새 버킷에 업로드합니다.

   ```
   aws s3 cp s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py s3://amzn-s3-demo-bucket/scripts/
   ```

1. [1단계: EMR Serverless 애플리케이션 생성](#gs-application-console)을 완료하면 EMR Studio의 **애플리케이션 세부 정보** 페이지로 이동합니다. 여기서 **작업 제출** 옵션을 선택합니다.

1. **작업 제출** 페이지에서 다음을 완료합니다.
   + **이름** 필드에 작업 실행을 직접 호출하려는 이름을 입력합니다.
   + **런타임 역할** 필드에 [작업 런타임 역할 생성](getting-started.md#gs-runtime-role)에서 생성한 역할의 이름을 입력합니다.
   + **스크립트 위치** 필드에 `s3://amzn-s3-demo-bucket/scripts/wordcount.py`를 S3 URI로 입력합니다.
   + **스크립트 인수** 필드에 `["s3://amzn-s3-demo-bucket/emr-serverless-spark/output"]`을 입력합니다.
   + **Spark 속성** 섹션에서 **텍스트로 편집**을 선택하고 다음 구성을 입력합니다.

     ```
     --conf spark.executor.cores=1 --conf spark.executor.memory=4g --conf spark.driver.cores=1 --conf spark.driver.memory=4g --conf spark.executor.instances=1
     ```

1. 작업 실행을 시작하려면 **작업 제출**을 선택합니다.

1. **작업 실행** 탭에서 **실행 중** 상태의 새 작업 실행이 표시됩니다.

------
#### [ Hive job run ]

자습서의 이 부분에서는 테이블을 생성하고, 몇 개의 레코드를 삽입하며, 개수 집계 쿼리를 실행합니다. Hive 작업을 실행하려면 먼저 단일 작업의 일부로 실행할 모든 Hive 쿼리가 포함된 파일을 생성하고 S3에 파일을 업로드한 다음, Hive 작업을 시작할 때 이 S3 경로를 지정합니다.

**Hive 작업을 실행하는 방법**

1. Hive 작업에서 실행하려는 모든 쿼리가 포함된 `hive-query.ql` 파일을 생성합니다.

   ```
   create database if not exists emrserverless;
   use emrserverless;
   create table if not exists test_table(id int);
   drop table if exists Values__Tmp__Table__1;
   insert into test_table values (1),(2),(2),(3),(3),(3);
   select id, count(id) from test_table group by id order by id desc;
   ```

1. 다음 명령을 사용하여 S3 버킷에 `hive-query.ql`을 업로드합니다.

   ```
   aws s3 cp hive-query.ql s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql
   ```

1. [1단계: EMR Serverless 애플리케이션 생성](#gs-application-console)을 완료하면 EMR Studio의 **애플리케이션 세부 정보** 페이지로 이동합니다. 여기서 **작업 제출** 옵션을 선택합니다.

1. **작업 제출** 페이지에서 다음을 완료합니다.
   + **이름** 필드에 작업 실행을 직접 호출하려는 이름을 입력합니다.
   + **런타임 역할** 필드에 [작업 런타임 역할 생성](getting-started.md#gs-runtime-role)에서 생성한 역할의 이름을 입력합니다.
   + **스크립트 위치** 필드에 `s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql`를 S3 URI로 입력합니다.
   + **Hive 속성** 섹션에서 **텍스트로 편집**을 선택하고 다음 구성을 입력합니다.

     ```
     --hiveconf hive.log.explain.output=false
     ```
   + **작업 구성** 섹션에서 **JSON으로 편집**을 선택하고 다음 JSON을 입력합니다.

     ```
     {
        "applicationConfiguration": 
        [{
            "classification": "hive-site",
               "properties": {
                   "hive.exec.scratchdir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/scratch",
                   "hive.metastore.warehouse.dir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/warehouse",
                   "hive.driver.cores": "2",
                   "hive.driver.memory": "4g",
                   "hive.tez.container.size": "4096",
                   "hive.tez.cpu.vcores": "1"
                }
         }]
     }
     ```

1. 작업 실행을 시작하려면 **작업 제출**을 선택합니다.

1. **작업 실행** 탭에서 **실행 중** 상태의 새 작업 실행이 표시됩니다.

------
#### [ Interactive workload ]

Amazon EMR 6.14.0 이상에서 EMR Studio에서 호스팅되는 노트북을 사용하여 EMR Serverless에서 Spark에 대한 대화형 워크로드를 실행할 수 있습니다. 권한 및 사전 조건을 포함한 자세한 내용은 [EMR Studio를 통해 EMR Serverless에서 대화형 워크로드 실행](interactive-workloads.md) 섹션을 참조하세요.

애플리케이션을 생성하고 필요한 권한을 설정한 후 다음 단계를 사용하여 EMR Studio에서 대화형 노트북을 실행합니다.

1. EMR Studio의 **워크스페이스** 탭으로 이동합니다. 그래도 Amazon S3 스토리지 위치 및 [EMR Studio 서비스 역할](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-service-role.html)을 구성해야 하는 경우 화면 상단의 배너에서 **Studio 구성** 버튼을 선택합니다.

1. 노트북에 액세스하려면 워크스페이스를 선택하거나 새 워크스페이스를 생성합니다. **빠른 시작**을 사용하여 새 탭에서 워크스페이스를 엽니다.

1. 새로 열린 탭으로 이동합니다. 왼쪽 탐색 창에서 **컴퓨팅** 아이콘을 선택합니다. **컴퓨팅 유형**으로 EMR Serverless를 선택합니다.

1. 이전 섹션에서 생성한 대화형 지원 애플리케이션을 선택합니다.

1. **런타임 역할** 필드에 EMR Serverless 애플리케이션이 작업 실행을 위해 수임할 수 있는 IAM 역할의 이름을 입력합니다. 런타임 역할에 대한 자세한 내용은 **Amazon EMR Serverless 사용 설명서에서 [작업 런타임 역할](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)을 참조하세요.

1. **연결**을 선택합니다. 최대 1분이 걸릴 수 있습니다. 페이지가 연결되면 새로 고쳐집니다.

1. 커널을 선택하고 노트북을 시작합니다. EMR Serverless에서 예제 노트북을 찾아 워크스페이스에 복사할 수도 있습니다. 예제 노트북에 액세스하려면 왼쪽 탐색의 **`{...}`** 메뉴로 이동하여 노트북 파일 이름에 `serverless`가 있는 노트북을 탐색합니다.

1. 노트북에서 드라이버 로그 링크와 작업을 모니터링하는 지표를 제공하는 실시간 인터페이스인 Apache Spark UI에 대한 링크에 액세스할 수 있습니다. 자세한 내용은 **Amazon EMR Serverless 사용 설명서의 [EMR Serverless 애플리케이션 및 작업 모니터링](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/app-job-metrics.html)을 참조하세요.

애플리케이션을 Studio Workspace에 연결하면 아직 실행되지 않은 경우 애플리케이션 시작이 자동으로 트리거됩니다. 애플리케이션을 사전에 시작하고 워크스페이스에 연결하기 전에 준비 상태를 유지할 수도 있습니다.

------

## 3단계: 애플리케이션 UI 및 로그 보기
<a name="gs-output-console"></a>

애플리케이션 UI를 보려면 먼저 작업 실행을 식별합니다. **Spark UI** 또는 **Hive Tez UI**에 대한 옵션은 작업 유형에 따라 해당 작업 실행의 첫 번째 옵션 행에서 사용할 수 있습니다. 적절한 옵션을 선택합니다.

Spark UI를 선택한 경우 **실행기** 탭을 선택하여 드라이버 및 실행기 로그를 봅니다. Hive Tez UI를 선택한 경우 **모든 태스크** 탭을 선택하여 로그를 확인합니다.

작업 실행 상태가 **성공**으로 표시되면 S3 버킷에서 작업의 출력을 볼 수 있습니다.

## 4단계: 정리
<a name="gs-cleanup-console"></a>

15분 동안 활동이 없으면 생성한 애플리케이션은 자동으로 중지되지만 그래도 다시 사용하지 않을 리소스는 해제하는 것이 좋습니다.

애플리케이션을 삭제하려면 **애플리케이션 나열** 페이지로 이동합니다. 생성한 애플리케이션을 선택하고 **작업 → 중지**를 선택하여 애플리케이션을 중지합니다. 애플리케이션이 `STOPPED` 상태이면 동일한 애플리케이션을 선택하고 **작업 → 삭제**를 선택합니다.

Spark 및 Hive 작업 실행에 대한 추가 예제는 [EMR Serverless 작업을 실행하는 경우 Spark 구성 사용](jobs-spark.md) 및 [EMR Serverless 작업을 실행하는 경우 Hive 구성 사용](jobs-hive.md) 섹션을 참조하세요.

# 에서 시작하기 AWS CLI
<a name="gs-cli"></a>

 AWS CLI 명령을 사용하여에서 EMR Serverless를 시작하여 애플리케이션을 생성하고, 작업을 실행하고, 작업 실행 출력을 확인하고, 리소스를 삭제합니다.

## 1단계: EMR Serverless 애플리케이션 생성
<a name="gs-application-cli"></a>

[https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CreateApplication.html](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CreateApplication.html) 명령을 사용하여 첫 번째 EMR Serverless 애플리케이션을 생성합니다. 애플리케이션 유형 및 사용하려는 애플리케이션 버전과 연결된 Amazon EMR 릴리스 레이블을 지정해야 합니다. 애플리케이션 이름은 선택 사항입니다.

------
#### [ Spark ]

Spark 애플리케이션을 생성하려면 다음 명령을 실행합니다.

```
aws emr-serverless create-application \
    --release-label emr-6.6.0 \
    --type "SPARK" \
    --name my-application
```

------
#### [ Hive ]

Hive 애플리케이션을 생성하려면 다음 명령을 실행합니다.

```
aws emr-serverless create-application \
    --release-label emr-6.6.0 \
    --type "HIVE" \
    --name my-application
```

------

출력에서 반환된 애플리케이션 ID를 기록합니다. ID를 사용하여 애플리케이션을 시작하고 작업 제출 중에 이후 이를 `application-id`로 참조합니다.

[2단계: EMR Serverless 애플리케이션에 작업 실행 제출](#gs-job-run-cli) 섹션으로 진행하기 전에 애플리케이션이 [https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_GetApplication.html](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_GetApplication.html) API를 사용하여 `CREATED` 상태에 도달했는지 확인합니다.

```
aws emr-serverless get-application \
    --application-id application-id
```

EMR Serverless는 요청된 작업을 수용할 작업자를 생성합니다. 기본적으로 온디맨드로 생성되지만 애플리케이션을 생성할 때 `initialCapacity` 파라미터를 설정하여 사전 초기화된 용량을 지정할 수도 있습니다. 애플리케이션에서 `maximumCapacity` 파라미터와 함께 사용할 수 있는 총 최대 용량을 제한할 수도 있습니다. 이러한 옵션에 대해 자세히 알아보려면 [EMR Serverless 작업 시 애플리케이션 구성](application-capacity.md) 섹션을 참조하세요.

## 2단계: EMR Serverless 애플리케이션에 작업 실행 제출
<a name="gs-job-run-cli"></a>

이제 EMR Serverless 애플리케이션에서 작업을 실행할 준비가 되었습니다.

------
#### [ Spark ]

이 단계에서는 PySpark 스크립트를 사용하여 여러 텍스트 파일에서 고유한 단어가 발생하는 횟수를 계산합니다. 퍼블릭 읽기 전용 S3 버킷은 스크립트 및 데이터세트를 모두 저장합니다. 애플리케이션은 Spark 런타임의 출력 파일과 로그 데이터를 사용자가 생성한 S3 버킷의 `/output` 및 `/logs` 디렉터리로 전송합니다.

**Spark 작업을 실행하는 방법**

1. 다음 명령을 사용하여 새 버킷에 실행할 샘플 스크립트를 복사합니다.

   ```
   aws s3 cp s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py s3://amzn-s3-demo-bucket/scripts/
   ```

1. 다음 명령에서 `application-id`를 애플리케이션 ID로 대체합니다. `job-role-arn`을 [작업 런타임 역할 생성](getting-started.md#gs-runtime-role)에서 생성한 런타임 역할 ARN으로 대체합니다. *`job-run-name`*을 작업 실행을 직접 호출하려는 이름으로 바꿉니다. 모든 `amzn-s3-demo-bucket` 문자열을 사용자가 생성한 Amazon S3 버킷으로 바꾸고 경로에 `/output`을 추가합니다. 그러면 EMR Serverless에서 애플리케이션의 출력 파일을 복사할 수 있는 새 폴더가 버킷에 생성됩니다.

   ```
   aws emr-serverless start-job-run \
       --application-id application-id \
       --execution-role-arn job-role-arn \
       --name job-run-name \
       --job-driver '{
           "sparkSubmit": {
             "entryPoint": "s3://amzn-s3-demo-bucket/scripts/wordcount.py",
             "entryPointArguments": ["s3://amzn-s3-demo-bucket/emr-serverless-spark/output"],
             "sparkSubmitParameters": "--conf spark.executor.cores=1 --conf spark.executor.memory=4g --conf spark.driver.cores=1 --conf spark.driver.memory=4g --conf spark.executor.instances=1"
           }
       }'
   ```

1. 출력에서 반환된 작업 실행 ID를 기록합니다. 다음 단계에서 `job-run-id`를 이 ID로 바꿉니다.

------
#### [ Hive ]

이 자습서에서는 테이블을 생성하고, 몇 개의 레코드를 삽입하며, 개수 집계 쿼리를 실행합니다. Hive 작업을 실행하려면 먼저 단일 작업의 일부로 실행할 모든 Hive 쿼리가 포함된 파일을 생성하고 S3에 파일을 업로드한 다음, Hive 작업을 시작할 때 이 S3 경로를 지정합니다.

**Hive 작업을 실행하는 방법**

1. Hive 작업에서 실행하려는 모든 쿼리가 포함된 `hive-query.ql` 파일을 생성합니다.

   ```
   create database if not exists emrserverless;
   use emrserverless;
   create table if not exists test_table(id int);
   drop table if exists Values__Tmp__Table__1;
   insert into test_table values (1),(2),(2),(3),(3),(3);
   select id, count(id) from test_table group by id order by id desc;
   ```

1. 다음 명령을 사용하여 S3 버킷에 `hive-query.ql`을 업로드합니다.

   ```
   aws s3 cp hive-query.ql s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql
   ```

1. 다음 명령에서 `application-id`를 자체 애플리케이션 ID로 대체합니다. `job-role-arn`을 [작업 런타임 역할 생성](getting-started.md#gs-runtime-role)에서 생성한 런타임 역할 ARN으로 대체합니다. 모든 `amzn-s3-demo-bucket` 문자열을 사용자가 생성한 Amazon S3 버킷으로 바꾸고 경로에 `/output` 및 `/logs`를 추가합니다. 그러면 버킷에 새 폴더가 생성되고, 여기로 EMR Serverless에서 애플리케이션의 출력 및 로그 파일을 복사할 수 있습니다.

   ```
   aws emr-serverless start-job-run \
       --application-id application-id \
       --execution-role-arn job-role-arn \
       --job-driver '{
           "hive": {
             "query": "s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql",
             "parameters": "--hiveconf hive.log.explain.output=false"
           }
       }' \
       --configuration-overrides '{
         "applicationConfiguration": [{
           "classification": "hive-site",
             "properties": {
               "hive.exec.scratchdir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/scratch",
               "hive.metastore.warehouse.dir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/warehouse",
               "hive.driver.cores": "2",
               "hive.driver.memory": "4g",
               "hive.tez.container.size": "4096",
               "hive.tez.cpu.vcores": "1"
               }
           }],
           "monitoringConfiguration": {
             "s3MonitoringConfiguration": {
               "logUri": "s3://amzn-s3-demo-bucket/emr-serverless-hive/logs"
              }
           }
       }'
   ```

1. 출력에서 반환된 작업 실행 ID를 기록합니다. 다음 단계에서 `job-run-id`를 이 ID로 바꿉니다.

------

## 3단계: 작업 실행의 출력 검토
<a name="gs-output-cli"></a>

작업 실행을 완료하는 데 일반적으로 3\$15분이 소요됩니다.

------
#### [ Spark ]

다음 명령을 사용하여 Spark 작업의 상태를 확인할 수 있습니다.

```
aws emr-serverless get-job-run \
    --application-id application-id \
    --job-run-id job-run-id
```

로그 대상을 `s3://amzn-s3-demo-bucket/emr-serverless-spark/logs`로 설정하면 `s3://amzn-s3-demo-bucket/emr-serverless-spark/logs/applications/application-id/jobs/job-run-id`에서 이 특정 작업 실행에 대한 로그를 찾을 수 있습니다.

Spark 애플리케이션의 경우 EMR Serverless는 30초마다 이벤트 로그를 S3 로그 대상의 `sparklogs` 폴더로 푸시합니다. 작업이 완료되면 드라이버 및 실행기에 대한 Spark 런타임 로그가 `driver` 또는 `executor`와 같은 작업자 유형에 따라 적절하게 이름이 지정된 폴더에 업로드됩니다. PySpark 작업의 출력은 `s3://amzn-s3-demo-bucket/output/`에 업로드됩니다.

------
#### [ Hive ]

다음 명령을 사용하여 Hive 작업의 상태를 확인할 수 있습니다.

```
aws emr-serverless get-job-run \
    --application-id application-id \
    --job-run-id job-run-id
```

로그 대상을 `s3://amzn-s3-demo-bucket/emr-serverless-hive/logs`로 설정하면 `s3://amzn-s3-demo-bucket/emr-serverless-hive/logs/applications/application-id/jobs/job-run-id`에서 이 특정 작업 실행에 대한 로그를 찾을 수 있습니다.

Hive 애플리케이션의 경우 EMR Serverless는 S3 로그 대상의 `HIVE_DRIVER` 폴더에 Hive 드라이버, `TEZ_TASK` 폴더에 Tez 태스크 로그를 지속적으로 업로드합니다. 작업 실행이 `SUCCEEDED` 상태에 도달하면 `configurationOverrides`의 `monitoringConfiguration` 필드에 지정한 Amazon S3 위치에서 Hive 쿼리의 출력을 사용할 수 있습니다.

------

## 4단계: 정리
<a name="gs-cleanup-cli"></a>

이 자습서 작업을 마치면 생성한 리소스를 삭제하는 방법을 고려합니다. 다시 사용할 의도가 없는 리소스는 해제하는 것이 좋습니다.

### 애플리케이션 삭제
<a name="delete-application-cli"></a>

애플리케이션을 삭제하려면 다음 명령을 사용합니다.

```
aws emr-serverless delete-application \
    --application-id application-id
```

### S3 로그 버킷 삭제
<a name="delete-s3-bucket-cli"></a>

S3 로깅 및 출력 버킷을 삭제하려면 다음 명령을 사용합니다. `amzn-s3-demo-bucket`을 [EMR Serverless에 대한 스토리지 준비](getting-started.md#gs-prepare-storage)에서 생성한 S3 버킷 이름으로 바꿉니다.

```
aws s3 rm s3://amzn-s3-demo-bucket --recursive
aws s3api delete-bucket --bucket amzn-s3-demo-bucket
```

### 작업 런타임 역할 삭제
<a name="delete-runtime-role-cli"></a>

런타임 역할을 삭제하려면 역할에서 정책을 분리합니다. 그런 다음, 역할과 정책을 모두 삭제할 수 있습니다.

```
aws iam detach-role-policy \
    --role-name EMRServerlessS3RuntimeRole \
    --policy-arn policy-arn
```

역할을 삭제하려면 다음 명령을 사용합니다.

```
aws iam delete-role \
    --role-name EMRServerlessS3RuntimeRole
```

역할에 연결된 정책을 삭제하려면 다음 명령을 사용합니다.

```
aws iam delete-policy \
    --policy-arn policy-arn
```

Spark 및 Hive 작업 실행에 대한 추가 예제는 [EMR Serverless 작업을 실행하는 경우 Spark 구성 사용](jobs-spark.md) 및 [EMR Serverless 작업을 실행하는 경우 Hive 구성 사용](jobs-hive.md) 섹션을 참조하세요.