AWS CLI에서 시작하기
AWS CLI에서 명령을 통해 EMR Serverless를 시작하여 애플리케이션을 생성하고, 작업을 실행하며, 작업 실행 출력을 확인하고, 리소스를 삭제합니다.
1단계: EMR Serverless 애플리케이션 생성
emr-serverless
create-application
명령을 사용하여 첫 번째 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 애플리케이션에 작업 실행 제출 섹션으로 진행하기 전에 애플리케이션이 get-application
API를 사용하여 CREATED
상태에 도달했는지 확인합니다.
aws emr-serverless get-application \
--application-id application-id
EMR Serverless는 요청된 작업을 수용할 작업자를 생성합니다. 기본적으로 온디맨드로 생성되지만 애플리케이션을 생성할 때 initialCapacity
파라미터를 설정하여 사전 초기화된 용량을 지정할 수도 있습니다. 애플리케이션에서 maximumCapacity
파라미터와 함께 사용할 수 있는 총 최대 용량을 제한할 수도 있습니다. 이러한 옵션에 대해 자세히 알아보려면 EMR Serverless 작업 시 애플리케이션 구성 단원을 참조하세요.
2단계: EMR Serverless 애플리케이션에 작업 실행 제출
이제 EMR Serverless 애플리케이션에서 작업을 실행할 준비가 되었습니다.
- Spark
-
이 단계에서는 PySpark 스크립트를 사용하여 여러 텍스트 파일에서 고유한 단어가 발생하는 횟수를 계산합니다. 퍼블릭 읽기 전용 S3 버킷은 스크립트 및 데이터세트를 모두 저장합니다. 애플리케이션은 Spark 런타임의 출력 파일과 로그 데이터를 사용자가 생성한 S3 버킷의 /output
및 /logs
디렉터리로 전송합니다.
Spark 작업을 실행하는 방법
-
다음 명령을 사용하여 새 버킷에 실행할 샘플 스크립트를 복사합니다.
aws s3 cp s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py s3://amzn-s3-demo-bucket
/scripts/
-
다음 명령에서 application-id
를 애플리케이션 ID로 대체합니다. job-role-arn
을 작업 런타임 역할 생성에서 생성한 런타임 역할 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"
}
}'
-
출력에서 반환된 작업 실행 ID를 기록합니다. 다음 단계에서 job-run-id
를 이 ID로 바꿉니다.
- Hive
-
이 자습서에서는 테이블을 생성하고, 몇 개의 레코드를 삽입하며, 개수 집계 쿼리를 실행합니다. Hive 작업을 실행하려면 먼저 단일 작업의 일부로 실행할 모든 Hive 쿼리가 포함된 파일을 생성하고 S3에 파일을 업로드한 다음, Hive 작업을 시작할 때 이 S3 경로를 지정합니다.
Hive 작업을 실행하는 방법
-
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;
-
다음 명령을 사용하여 S3 버킷에 hive-query.ql
을 업로드합니다.
aws s3 cp hive-query.ql s3://amzn-s3-demo-bucket
/emr-serverless-hive/query/hive-query.ql
-
다음 명령에서 application-id
를 자체 애플리케이션 ID로 대체합니다. job-role-arn
을 작업 런타임 역할 생성에서 생성한 런타임 역할 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"
}
}
}'
-
출력에서 반환된 작업 실행 ID를 기록합니다. 다음 단계에서 job-run-id
를 이 ID로 바꿉니다.
3단계: 작업 실행의 출력 검토
작업 실행을 완료하는 데 일반적으로 3~5분이 소요됩니다.
- 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단계: 정리
이 자습서 작업을 마치면 생성한 리소스를 삭제하는 방법을 고려합니다. 다시 사용할 의도가 없는 리소스는 해제하는 것이 좋습니다.
애플리케이션 삭제
애플리케이션을 삭제하려면 다음 명령을 사용합니다.
aws emr-serverless delete-application \
--application-id application-id
S3 로그 버킷 삭제
S3 로깅 및 출력 버킷을 삭제하려면 다음 명령을 사용합니다. amzn-s3-demo-bucket
을 EMR Serverless에 대한 스토리지 준비에서 생성한 S3 버킷 이름으로 바꿉니다.
aws s3 rm s3://amzn-s3-demo-bucket
--recursive
aws s3api delete-bucket --bucket amzn-s3-demo-bucket
작업 런타임 역할 삭제
런타임 역할을 삭제하려면 역할에서 정책을 분리합니다. 그런 다음, 역할과 정책을 모두 삭제할 수 있습니다.
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 구성 사용 및 EMR Serverless 작업을 실행하는 경우 Hive 구성 사용 섹션을 참조하세요.