AWS Glue ETL 작업이 장시간 실행되는 이유는 무엇입니까?

4분 분량
0

AWS Glue 작업이 장시간 실행되고 있습니다. -또는- AWS Glue 스트래글러 태스크를 완료하는 데 시간이 오래 걸립니다.

간략한 설명

AWS Glue 작업을 완료하는 데 시간이 오래 걸리는 몇 가지 일반적인 이유는 다음과 같습니다.

  • 대규모 데이터 집합
  • 데이터 집합에 데이터 배포가 균일하지 않음
  • 실행기 전체에 태스크 배포가 고르지 않음
  • 리소스 프로비저닝 부족

해결 방법

지표 활성화

AWS Glue는 실행기 및 각 실행기가 수행하는 양에 대한 정보를 제공하는 데 사용할 수 있는 Amazon CloudWatch 지표를 제공합니다. 다음 중 하나를 수행하여 AWS Glue 작업에서 CloudWatch 지표를 활성화할 수 있습니다.

특수 파라미터 사용: AWS Glue 작업에 다음 인수를 추가합니다. 이 파라미터를 사용하면 작업 실행에 대한 작업 프로파일링의 지표를 수집할 수 있습니다. 이러한 지표는 AWS Glue 콘솔과 CloudWatch 콘솔에서 사용할 수 있습니다.

Key: --enable-metrics

AWS Glue 콘솔 사용: 기존 작업에 대한 지표를 활성화하려면 다음을 수행합니다.

  1. AWS Glue 콘솔을 엽니다.
  2. 탐색 창에서 **Jobs(작업)**을 선택합니다.
  3. 지표를 활성화할 작업을 선택합니다.
  4. **Action(작업)**을 선택한 다음 **Edit job(작업 편집)**을 선택합니다.
  5. **Monitoring options(모니터링 옵션)**에서 **Job metrics(작업 지표)**를 선택합니다.
  6. **Save(저장)**을 선택합니다.

API 사용: --enable-metricsDefaultArguments 파라미터로 설정한 AWS Glue UpdateJob API를 사용하여 기존 작업에 대한 지표를 활성화합니다.

참고: AWS Glue 2.0은 지표를 보고하는 YARN을 사용하지 않습니다. 즉, AWS Glue 2.0의 경우 numberMaxNeededExecutors 및 numberAllExecutor와 같은 일부 실행기 지표를 가져올 수 없습니다.

연속 로깅 활성화

AWS Glue 작업에서 연속 로깅을 활성화하면 실시간 드라이버 및 실행기 로그가 5초마다 CloudWatch에 푸시됩니다. 이 실시간 로깅 정보를 사용하여 실행 중인 작업에 대해 세부 정보를 확인할 수 있습니다. 자세한 내용은 AWS Glue 작업에 대한 연속 로깅 활성화 단원을 참조하세요.

드라이버 및 실행기 로그 확인

드라이버 로그에서, 완료되기 전에 장시간 실행된 태스크가 있는지 확인합니다. 예를 들면 다음과 같습니다.

2021-04-15 10:53:54,484 ERROR executionlogs:128 - g-7dd5eec38ff57a273fcaa35f289a99ecc1be6901:2021-04-15 10:53:54,484 INFO [task-result-getter-1] scheduler.TaskSetManager (Logging.scala:logInfo(54)): Finished task 0.0 in stage 7.0 (TID 139) in 4538 ms on 10.117.101.76 (executor 10) (13/14)
...
2021-04-15 12:11:30,692 ERROR executionlogs:128 - g-7dd5eec38ff57a273fcaa35f289a99ecc1be6901:2021-04-15 12:11:30,692 INFO [task-result-getter-3] scheduler.TaskSetManager (Logging.scala:logInfo(54)): Finished task 13.0 in stage 7.0 (TID 152) in 4660742 ms on 10.117.97.97 (executor 11) (14/14)

이러한 로그에서 단일 태스크를 완료하는 데 77분이 걸렸음을 확인할 수 있습니다. 이 정보를 사용하여 특정 태스크에 시간이 오래 걸리는 이유를 검토할 수 있습니다. 검토에는 Apache Spark 웹 UI를 사용할 수 있습니다. Spark UI는 다양한 단계, 태스크 및 실행기에 대해 구조적인 정보를 제공합니다.

스파크 UI 활성화

Spark UI를 사용하여 장시간 실행되는 Spark 작업의 문제를 해결할 수 있습니다. Spark 기록 서버를 시작하고 Spark UI 로그를 활성화하면 스테이지와 태스크에 대한 정보를 얻을 수 있습니다. 로그를 사용하여 작업자가 태스크를 실행하는 방법을 알아볼 수 있습니다. AWS Glue 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 Spark UI를 활성화할 수 있습니다. 자세한 내용은 AWS Glue 작업에 대해 Apache Spark 웹 UI 활성화를 참조하세요.

작업이 완료되면 다음과 유사한 드라이버 로그가 표시될 수 있습니다.

ERROR executionlogs:128 - example-task-id:example-timeframe INFO [pool-2-thread-1] s3n.MultipartUploadOutputStream (MultipartUploadOutputStream.java:close(414)): close closed:false s3://dox-example-bucket/spark-application-1626828545941.inprogress

작업에 대한 로그를 분석한 후 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 또는 Docker를 사용하여 Spark 기록 서버를 시작할 수 있습니다. UI를 열고 Executor(실행기) 탭으로 이동하여 특정 실행기가 더 오랫동안 실행 중인지 확인합니다. 실행 중이라면 데이터 집합의 데이터 왜곡으로 인해 작업 배포가 고르지 않고 사용 가능한 리소스의 사용률이 낮아질 수 있습니다. Stages(스테이지) 탭에서는 장시간 걸린 스테이지에 대한 자세한 정보와 통계를 확인할 수 있습니다. 해당 스테이지에서 비용과 시간이 많이 드는 셔플 유출이 관련되었는지에 대한 자세한 내용을 확인할 수 있습니다.

데이터 처리 장치(DPU) 용량 계획

모든 실행기가 작업에 동등하게 기여하지만 여전히 작업 완료에 오랜 시간이 걸리면 작업 속도를 높이기 위해 작업에 더 많은 작업자를 추가하는 것이 좋습니다. DPU 용량 계획은 다음을 방지하는 데 도움이 될 수 있습니다.

  • 프로비저닝 부족으로 인해 실행 시간이 느려짐
  • 비용은 커지지만 결과 제공 시간이 동일한 프로비저닝 과다

CloudWatch 지표로부터, 현재 사용된 실행기 수와 필요한 최대 실행기 수에 대한 정보를 얻을 수 있습니다. 필요한 DPU 수는 입력 파티션의 수와 요청된 작업자 유형에 따라 다릅니다.

입력 파티션 수를 정의할 때는 다음 사항에 유의하세요.

  • Amazon Simple Storage Service(Amazon S3) 파일을 분할할 수 없는 경우, 파티션 수는 입력 파일 수와 같습니다.
  • Amazon S3 파일을 분할할 수 있고 데이터가 구조화되지 않은/반구조화인 경우 파티션 수는 총 파일 크기/64MB와 같습니다. 각 파일의 크기가 64MB 미만이면 파티션 수는 파일 수와 같습니다.
  • Amazon S3 파일을 분할할 수 있고 데이터가 구조화된 경우 파티션 수는 총 파일 크기/128MB와 같습니다.

최적의 DPU 수를 계산하려면 다음을 수행하세요.

예를 들어, 입력 파티션 수가 428이라고 가정합니다. 그런 다음 다음 공식을 사용하여 최적의 DPU 수를 계산할 수 있습니다.

필요한 최대 실행기 수=입력 파티션 수/실행기당 태스크 수=428/4=107

다음 사항에 유의하세요.

  • 표준 작업자 유형은 실행기당 4개의 태스크 지원
  • G.1X는 실행기당 8개의 태스크 지원
  • G.2X는 실행기당 16개의 태스크 지원

표준 작업자 유형에는 하나의 노드에 드라이버 하나를 포함하여 두 개의 실행기가 있습니다. 이 실행기 중 하나는 Spark의 드라이버입니다. 따라서 108개의 실행기가 필요합니다.

필요한 DPU 수=(실행기 수/노드당 실행기 수)+1 DPU=(108/2)+1=55


관련 정보

AWS Glue에서 사용하는 특수 파라미터

Apache Spark 웹 UI를 사용하여 작업 모니터링

DPU 용량 계획 모니터링

AWS 공식
AWS 공식업데이트됨 3년 전