AWS Glue 추출, 전환, 적재(ETL) 작업이 "Container killed by YARN for exceeding memory limits"라는 오류로 실패합니다.
간략한 설명
이 오류의 일반적인 원인은 다음과 같습니다.
- 기본 Apache Spark 클러스터의 메모리 임계값을 초과하는 메모리 집약적 작업. 이러한 작업에는 대규모 테이블을 조인하거나 분포가 왜곡된 데이터세트를 처리하는 경우가 포함될 수 있습니다.
- 각 실행자에 할당된 메모리보다 더 많은 메모리를 사용하는 대용량 데이터 파티션.
- 분할할 수 없어 메모리 내 파티션이 커진 대용량 파일.
해결 방법
이 오류를 해결하려면 다음 해결 방법 중 하나 이상을 완료하십시오.
작업 유형 업그레이드
G.2x는 메모리 구성이 더 크므로 워커 유형을 업그레이드하십시오. 워커 유형을 G.1x에서 다음 워커 유형으로 업그레이드할 수 있습니다.
- G.2x
- G.4x
- G.8x
- G.12x
- G.16x
- R.1x
- R.2x
- R.4x
- R.8x
워커 유형의 사양에 대한 자세한 내용은 Spark 작업의 작업 속성 정의 및 AWS Glue 버전을 참조하십시오.
작업의 실행자 늘리기
워커 유형을 업그레이드한 후에도 오류가 지속되면 작업의 실행자 수를 늘리십시오. 실행자마다 특정 수의 코어가 있습니다. 이 개수는 실행자가 처리할 수 있는 파티션 수를 결정합니다. 워커 유형은 데이터 처리 장치(DPU)의 Spark 구성을 정의합니다.
데이터 업데이트
조인과 같은 셔플 작업 전에 AWS Glue가 실행자를 균등하게 사용하도록 하려면 데이터가 병렬인지 확인하십시오. 모든 실행자에서 데이터를 다시 분할하려면 ETL 작업에 다음 명령 중 하나를 포함하십시오.
DynamicFrame의 경우 다음 명령을 포함합니다.
dynamicFrame.repartition(totalNumberOfExecutorCores)
DataFrame의 경우 다음 명령을 포함합니다.
dataframe.repartition(totalNumberOfExecutorCores)
작업 북마크 사용
작업 북마크를 사용하는 경우 AWS Glue 작업이 새로 작성된 파일만 처리합니다. 이 구성은 AWS Glue 작업에서 처리하는 파일 수를 줄이고 메모리 문제를 줄입니다. 북마크는 이전 실행 시 처리된 파일의 메타데이터를 저장합니다. 이후 실행에서 작업은 타임스탬프를 비교한 다음, 이러한 파일을 다시 처리할지 여부를 결정합니다. 자세한 내용은 작업 북마크를 사용하여 처리된 데이터 추적을 참조하십시오.
DynamicFrame을 사용하여 병렬로 데이터 읽기
JDBC 테이블에 연결하면 Spark는 기본적으로 하나의 동시 연결만 엽니다. 드라이버는 단일 Spark 실행자에서 전체 테이블을 한 번에 다운로드하려고 시도합니다. 이 다운로드는 시간이 더 오래 걸릴 수 있으며 실행자에 OOM(메모리 부족) 오류가 발생할 수 있습니다. 대신 JDBC 테이블의 특정 속성을 구성하여 AWS Glue에 DynamicFrame을 사용하여 데이터를 병렬로 읽도록 지시하십시오. 또는 Spark DataFrame을 사용하여 JDBC에서 병렬 읽기를 수행할 수 있습니다. 자세한 내용은 Spark 웹 사이트에서 다른 데이터베이스에 대한 JDBC를 참조하십시오.
ETL 작업에 고성능 함수 사용
ETL 작업에는 사용자 정의 함수를 사용하지 마십시오. 특히 Python 또는 Scala 코드를 Spark의 함수 및 메서드와 결합할 경우에는 더욱 그렇습니다. 예를 들어 if/else 문이나 for 루프 내에서 빈 DataFrame을 확인하기 위해 Spark **df.count()**를 사용하지 마십시오. 대신 df.schema() 또는 **df.rdd.isEmpty()**와 같은 성능이 더 좋은 함수를 사용하십시오.
AWS Glue 작업 테스트 및 최적화
프로덕션 환경에서 AWS Glue 작업을 실행하기 전에 대화형 세션에서 AWS Glue 작업을 테스트하고 ETL 코드를 최적화하십시오.
위 솔루션 옵션 중 어느 것도 작동하지 않는 경우 입력 데이터를 청크 또는 파티션으로 분할하십시오. 그런 다음, 단일 대규모 작업을 실행하는 대신 여러 AWS Glue ETL 작업을 실행합니다. 자세한 내용은 제한된 실행을 통한 워크로드 파티셔닝을 참조하십시오.
관련 정보
OOM 예외 및 작업 이상 디버깅
AWS Glue를 사용하여 Spark 작업을 확장하고 데이터를 분할하는 모범 사례
AWS Glue의 메모리 관리 최적화