기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
에서 시작하기 AWS CLI
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
.
로 이동하기 전에 애플리케이션이 get-application
를 사용하여 CREATED
상태에 도달했는지 2단계: EMR Serverless 애플리케이션에 작업 실행 제출확인합니다API.
aws emr-serverless get-application \
--application-id application-id
EMR Serverless는 요청된 작업을 수용할 작업자를 생성합니다. 기본적으로 이러한 파라미터는 온디맨드 방식으로 생성되지만 애플리케이션을 생성할 때 initialCapacity
파라미터를 설정하여 미리 초기화된 용량을 지정할 수도 있습니다. 애플리케이션이 maximumCapacity
파라미터와 함께 사용할 수 있는 총 최대 용량을 제한할 수도 있습니다. 이러한 옵션에 대해 자세히 알아보려면 애플리케이션 구성 단원을 참조하세요.
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/
-
다음 명령에서 애플리케이션 IDapplication-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를 기록해 둡니다. 다음 단계에서 를 이 IDjob-run-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
-
다음 명령에서 자체 애플리케이션 IDapplication-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를 기록해 둡니다. 다음 단계에서 를 이 IDjob-run-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는 Hive 드라이버를 S3 로그 대상의 HIVE_DRIVER
폴더에 지속적으로 업로드하고 Tez 작업 로그를 TEZ_TASK
폴더에 업로드합니다. 작업 실행이 SUCCEEDED
상태에 도달하면 의 monitoringConfiguration
필드에 지정한 Amazon S3 위치에서 Hive 쿼리의 출력을 사용할 수 있게 됩니다configurationOverrides
.
4단계: 정리
이 자습서 작업을 마치면 생성한 리소스를 삭제하는 것이 좋습니다. 다시 사용할 의도가 없는 리소스를 릴리스하는 것이 좋습니다.
애플리케이션 삭제
애플리케이션을 삭제하려면 다음 명령을 사용합니다.
aws emr-serverless delete-application \
--application-id application-id
S3 로그 버킷 삭제
S3 로깅 및 출력 버킷을 삭제하려면 다음 명령을 사용합니다. amzn-s3-demo-bucket
를 에서 생성된 S3 버킷의 실제 이름으로 바꿉EMR Serverless용 스토리지 준비니다.
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 작업 실행에 대한 자세한 예는 Spark 작업 및 섹션을 참조하세요Hive 작업.