View a markdown version of this page

AWS Glue 버전 6.0으로 AWS Glue for Spark 작업 마이그레이션 - AWS Glue

AWS Glue 버전 6.0으로 AWS Glue for Spark 작업 마이그레이션

이 주제에서는 Spark 애플리케이션 및 ETL 작업을 AWS Glue 6.0으로 마이그레이션할 수 있도록 하는 AWS Glue 버전 5.1과 버전 6.0 간의 변경 사항에 대해 설명합니다. 또한 AWS Glue 6.0의 기능과 이를 사용할 때의 이점에 대해 설명합니다.

AWS Glue ETL 작업에 이 기능을 사용하려면 작업 생성 시 Glue version으로 6.0을 선택합니다.

새로운 기능

이 섹션에서는 AWS Glue 버전 6.0의 새로운 기능과 장점에 대해 설명합니다.

  • Apache Spark가 AWS Glue 5.1의 3.5.6에서 AWS Glue 6.0의 4.1.1로 업그레이드됨

  • Scala가 2.12.18에서 2.13.17로 업그레이드됨

  • Python이 3.11에서 3.13으로 업그레이드됨

  • 오픈 테이블 형식(OTF)이 Hudi 1.1.1, Iceberg 1.11.0 및 Delta Lake 4.2.0으로 업데이트됨

  • Iceberg 형식 버전 3 - 데이터 유형 및 기존 메타데이터 구조를 확장하여 다음과 같은 새 기능을 추가했습니다.

    • 단순화된 반정형 데이터 관리와 더 빠른 읽기를 위한 변형 세분화가 포함된 VARIANT 데이터 유형.

    • 나노초 정밀도 타임스탬프.

    • 지리 공간 데이터 유형(Geometry 및 Geography).

  • Spark 선언적 파이프라인(SDP) - 스트리밍 테이블 및 구체화된 뷰를 지원하는 SQL 또는 DataFrame API를 사용하여 엔드 투 엔드 데이터 파이프라인을 정의하기 위한 새로운 선언적 프레임워크입니다. 자세한 내용은 Spark 선언적 파이프라인 섹션을 참조하세요.

  • 대화형 세션용 Spark Connect - Spark Connect 프로토콜을 통해 AWS Glue 대화형 세션에 대한 씬 클라이언트 연결을 지원하여 원격 개발 워크플로가 가능합니다.

  • Arrow 네이티브 Python UDF/UDTF - Apache Arrow 열 기반 형식을 기본적으로 사용하여 Python 사용자 정의 함수의 성능을 개선했습니다.

  • 고객 관리형 또는 서비스 생성 Python 가상 환경(--python-virtual-env) - 런타임 시 AWS Glue가 Spark 드라이버 및 실행기에 연결하는 자체 Python venv를 구축 및 제공하여 종속성 관리를 완벽하게 제어할 수 있습니다. 기존 작업이 AWS Glue 6.0으로 마이그레이션되면 필요한 경우 AWS Glue가 이 가상 환경을 자동으로 생성합니다.

  • 스트리밍 개선 사항 - 밀리초 수준의 지연 시간을 제공하는 상태 비저장 스트리밍용 실시간 모드. 자세한 내용은 스트리밍 작업에 대한 실시간 모드 활성화 섹션을 참조하세요.

  • 커넥터 업그레이드 - Amazon Redshift, MongoDB, Snowflake 및 기타 커넥터를 업데이트했습니다. 전체 버전 세부 정보는 부록 C: 커넥터 업그레이드 섹션을 참조하세요.

알려진 문제 및 제한

다음과 같은 알려진 문제 및 제한 사항에 유의하세요.

  • Spark 4.1에서 ANSI 모드가 기본적으로 활성화됩니다. 이전에 오버플로 시 NULL을 반환한 작업(예: 정수 산술, 캐스트 작업)은 이제 예외를 발생시킵니다. 이전 동작을 복원하려면 spark.sql.ansi.enabled=false를 설정합니다.

  • Spark 선언적 파이프라인(SDP)은 특정 SQL 구문만 제한적으로 지원하는 새로운 기능입니다. 현재 제한 사항은 Spark 선언적 파이프라인 설명서를 참조하세요.

  • AWS Glue 6.0에서 생성된 Iceberg v3 테이블은 Athena SQL에서 읽을 수 없습니다(오류: Cannot read unsupported version 3). Athena와의 교차 엔진 호환성을 위해 Iceberg v2를 사용하세요.

  • Python 3.13은 사용되지 않는 여러 모듈을 제거하고 일부 표준 라이브러리 함수의 동작을 변경합니다. Python 3.13 마이그레이션 가이드에서 호환성을 검토하세요.

  • AWS SDK for Java 2.x와 --user-jars-first의 호환성 - AWS Glue 6.0에는 AWS SDK for Java 2.x 버전 2.44.6이 포함되어 있습니다. 이전 버전의 AWS SDK for Java 2.x를 번들링하는 사용자 지정 JAR과 함께 --user-jars-first 작업 파라미터를 사용하는 경우 java.lang.NoSuchFieldError 또는 유사한 오류로 인해 작업이 실패할 수 있습니다. 이러한 실패는 사용자 지정 JAR에 번들링된 SDK에 AWS Glue 런타임이 의존하는 클래스, 필드 또는 메서드가 없을 때 발생합니다. 이 문제를 방지하려면 --user-jars-first와 함께 제공하는 모든 사용자 지정 JAR에서 AWS SDK for Java 2.x 버전 2.44.6 이상을 사용해야 합니다.

호환성에 영향을 미치는 변경

호환성에 영향을 미치는 다음과 같은 변경 사항에 유의하세요.

  • EMRFS가 제거되었습니다. S3A는 AWS Glue 6.0의 유일한 S3 파일 시스템입니다. com.amazon.ws.emr.hadoop.fs.EmrFileSystem 클래스를 더 이상 사용할 수 없습니다. s3:// 경로를 사용하는 작업은 자동으로 S3A를 사용합니다. 이전에 EMRFS별 구성(예: fs.s3.consistent.*)을 설정한 경우 제거하세요.

  • AWS SDK for Java v1이 제거되었습니다. AWS SDK v2(2.44.6)만 사용할 수 있습니다. com.amazonaws.services.* 패키지를 가져오는 작업은 software.amazon.awssdk.services.*로 마이그레이션해야 합니다.

  • Scala가 2.12에서 2.13으로 업그레이드되었습니다. Scala 2.12에 대해 컴파일된 사용자 지정 JAR은 작동하지 않습니다. Scala 2.13.17에 대해 다시 컴파일하세요. 주요 변경 사항: JavaConversions 제거됨(CollectionConverters 사용), MutableList 제거됨(ListBuffer 사용), 병렬 컬렉션은 별도로 가져와야 함.

  • Spark 4.1 API 변경 사항:

    • SQLContext 제거됨 - SparkSession을 직접 사용합니다.

    • 기본적으로 ANSI 모드가 활성화됨 - 암시적 유형 변환 및 오버플로가 다르게 동작합니다.

    • 더 이상 사용되지 않는 여러 API가 제거되었습니다. Apache Spark 웹 사이트의 Spark 4.1 마이그레이션 가이드를 참조하세요.

  • CreateSession API 검증 - 대화형 세션의 세션 파라미터에 대한 추가 검증입니다. 이전에 자동으로 수락되었던 잘못된 구성이 이제 오류를 반환할 수 있습니다.

  • getResolvedOptions 동작 변경 사항 - 인수 접두사 일치가 기본적으로 비활성화되어 있습니다(allow_abbrev=False). 전체 인수 이름을 사용하거나 getResolvedOptions()allow_abbrev=True를 전달하여 이전 동작을 복원합니다.

AWS Glue 6.0으로 마이그레이션할 작업

기존 작업의 경우 작업 구성에서 Glue version을 이전 버전에서 Glue 6.0으로 변경합니다.

  • AWS Glue Studio의 Glue version에서 Glue 6.0 - Supports Spark 4.1.1, Scala 2, Python 3을 선택합니다.

  • API에서 UpdateJob API 작업의 GlueVersion 파라미터에서 6.0을 선택합니다.

새 작업의 경우 작업을 생성할 때 Glue 6.0을 선택합니다.

  • 콘솔의 Glue version에서 Spark 4.1.1, Python 3 (Glue Version 6.0) or Spark 4.1.1, Scala 2 (Glue Version 6.0)를 선택합니다.

  • AWS Glue Studio의 Glue version에서 Glue 6.0 - Supports Spark 4.1.1, Scala 2, Python 3을 선택합니다.

  • API에서 CreateJob API 작업의 GlueVersion 파라미터에서 6.0을 선택합니다.

작업을 마이그레이션하는 데 도움이 되도록 Apache Spark용 생성형 AI 업그레이드를 사용하여 AWS Glue ETL 작업을 이전 AWS Glue 버전(2.0 이상)에서 최신 AWS Glue 버전으로 업그레이드할 수 있습니다.

문제 해결

Spark 문제 해결 에이전트를 사용하여 AWS Glue ETL 작업의 문제를 해결할 수 있습니다.

마이그레이션 체크리스트

마이그레이션을 위해 이 체크리스트를 검토합니다.

  • [Scala] 사용자 지정 JAR을 Scala 2.13.17에 대해 다시 컴파일합니다. JavaConversionsCollectionConverters로 바꿉니다.

  • [Python] Python 3.13 호환성을 위한 코드를 업데이트합니다. 더 이상 사용되지 않는 모듈(예: imp, cgi, cgitb)의 사용을 제거합니다.

  • [Python] boto3 참조를 1.40에서 1.42로 업데이트합니다.

  • [Spark SQL] ANSI 모드 영향에 대한 쿼리를 검토합니다. 필요한 경우 spark.sql.ansi.enabled=false를 추가합니다.

  • [SDK] AWS SDK v1 가져오기(com.amazonaws.*)를 SDK v2(software.amazon.awssdk.*)로 바꿉니다.

  • [S3] EMRFS별 구성을 제거합니다. 이제 S3A가 기본 S3 커넥터입니다.

  • [종속성] --extra-jars를 Scala 2.13 및 Spark 4.1용으로 컴파일된 버전으로 업데이트합니다.

AWS Glue 5.1에서 AWS Glue 6.0으로 마이그레이션

AWS Glue 5.1에 존재하는 모든 기존 작업 파라미터와 주요 기능은 AWS Glue 6.0에 존재합니다. 마이그레이션할 때 다음 변경 사항에 유의합니다.

  • S3 파일 시스템: EMRFS를 더 이상 사용할 수 없습니다. S3A가 유일한 S3 커넥터입니다. 이전에 spark.hadoop.fs.s3a.endpoint.region을 설정한 경우 계속 사용합니다. 설정하지 않은 경우 VPC 엔드포인트 또는 네트워크 구성에서 S3A가 올바른 리전을 확인할 수 있도록 허용하는지 확인합니다.

  • Scala 바이너리 호환성: AWS Glue 6.0은 Scala 2.13을 사용합니다. Scala 2.12로 컴파일된 모든 --extra-jarsNoSuchMethodError 또는 ClassNotFoundException과 함께 실패합니다. 모든 사용자 지정 Scala/Java JAR을 다시 컴파일합니다.

  • Spark SQL 동작 변경 사항:

    • ANSI 모드는 기본적으로 ON입니다. 정수 오버플로, 잘못된 캐스트 및 배열 인덱스 범위 초과 시 NULL을 반환하는 대신 예외가 발생합니다.

    • spark.sql.legacy.timeParserPolicy 기본값이 변경되었습니다. 날짜/시간 구문 분석이 다르게 동작할 수 있습니다.

    • SQL에서의 암시적 문자열-숫자 변환은 ANSI 모드에서 실패할 수 있습니다.

  • Python 버전: Python 3.13이 런타임입니다. --additional-python-modules 기능은 계속 작동하지만 더 이상 사용되지 않습니다. 완전한 종속성 제어를 위해 --python-virtual-env로 마이그레이션하는 것이 좋습니다.

  • AWS SDK: SDK v2만 사용할 수 있습니다. 스크립트가 boto3(Python)를 사용하는 경우 변경할 필요가 없습니다. boto3는 계속 작동합니다. AWS SDK를 직접 사용하는 Scala/Java 작업의 경우 v2 API로 마이그레이션하세요.

Spark 마이그레이션 설명서를 참조하세요.

이전 AWS Glue 버전에서 AWS Glue 6.0으로 마이그레이션

AWS Glue 6.0용 커넥터 및 JDBC 드라이버 마이그레이션

업그레이드된 JDBC 및 데이터 레이크 커넥터 버전은 다음을 참조하세요.

다음 변경 사항은 AWS Glue 6.0에 대한 부록 D: 오픈 테이블 형식 업그레이드에서 식별된 OTF 버전 업그레이드에 적용됩니다.

Apache Iceberg

다음과 같은 변경 사항에 유의하세요.

  • Iceberg가 1.11.0으로 업그레이드되어 Apache Iceberg 버전 3 사양을 완벽하게 지원.

  • 최적화된 반정형 데이터 쿼리를 위한 변형 세분화가 포함된 VARIANT 데이터 유형.

  • 나노초 정밀도 타임스탬프.

  • 지리 공간 데이터 유형(Geometry 및 Geography).

AWS Glue 5.1부터 AWS Glue ETL은 다음과 같은 Iceberg 기능을 지원합니다. 삭제 벡터(Puffin 파일에 저장된 Roaring Bitmap을 사용하는 merge-on-read 방식) 및 first-row-id 메타데이터를 통한 행 계보 추적.

Apache Hudi

다음과 같은 변경 사항에 유의하세요.

  • Hudi가 1.1.1로 업그레이드되었습니다.

  • AWS Lake Formation 등록 테이블에 대한 FTA 읽기 및 쓰기 액세스가 계속 지원됩니다.

Delta Lake

다음과 같은 변경 사항에 유의하세요.

  • Delta Lake가 4.2.0으로 업그레이드되었습니다.

  • AWS Lake Formation 등록 테이블에 대한 FTA 읽기 및 쓰기 액세스가 계속 지원됩니다.

알려진 제한 사항

AWS Glue 6.0에는 다음과 같은 제한 사항이 적용됩니다.

  • Iceberg 네이티브 테이블 암호화 키는 지원되지 않습니다.

  • Iceberg 다중 인수 변환은 지원되지 않습니다.

  • 새로운 Iceberg v3 데이터 유형은 Spark DataFrames에서만 지원됩니다. 이러한 기능은 DynamicFrames에서 작동하지 않습니다.

  • AWS Glue Studio의 Visual ETL은 새로운 Iceberg v3 데이터 유형을 지원하지 않습니다. Visual ETL에서 이러한 새로운 기능을 사용하려면 ETL 작업을 Amazon SageMaker Unified Studio로 마이그레이션하는 것이 좋습니다.

  • 세분화된 액세스 제어(FGAC)는 VARIANT 열에서 지원되지 않습니다.

  • 'format-version'='3'으로 생성된 Iceberg 테이블은 Athena SQL에서 읽을 수 없습니다(오류: Cannot read unsupported version 3). Athena와의 교차 엔진 호환성을 위해 Iceberg v2를 사용하세요.

부록 A: 중요한 종속성 업그레이드

다음은 종속성 업그레이드입니다.

종속성 AWS Glue 6.0 버전 AWS Glue 5.1 버전 AWS Glue 5.0 버전 AWS Glue 4.0 버전
Java 17 17 17 8
Spark 4.1.1 3.5.6 3.5.4 3.3.0-amzn-1
Hadoop 3.4.2 3.4.1 3.4.1 3.3.3-amzn-0
Scala 2.13.17 2.12.18 2.12.18 2.12
Jackson 2.20.0 2.15.2 2.15.2 2.12
Hive 2.3.10-amzn-1 2.3.9-amzn-4 2.3.9-amzn-4 2.3.9-amzn-2
화살표 18.3.0 12.0.1 12.0.1 7.0.0
AWS Glue 데이터 카탈로그 클라이언트 4.11.0 4.9.0 4.5.0 3.7.0
AWSJava용 SDK 2.44.6(v2만 해당) 2.35.5 2.29.52 1.12
Python 3.13 3.11 3.11 3.10
Boto 3 1.42.84 1.40.61 1.34.131 1.26
Json4s 3.7.0-M11 3.7.0-M11 3.7.0-M11 3.7.0-M11
EMR DynamoDB 커넥터 6.1.0 5.7.0 5.6.0 4.16.0
Netty 4.2.7 해당 사항 없음 해당 사항 없음 해당 사항 없음
Parquet 1.16.0 해당 사항 없음 해당 사항 없음 해당 사항 없음
NumPy 2.4.4 해당 사항 없음 해당 사항 없음 해당 사항 없음
Pandas 2.3.3 해당 사항 없음 해당 사항 없음 해당 사항 없음

부록 B: JDBC 드라이버 업그레이드

다음은 JDBC 드라이버 업그레이드입니다.

드라이버 AWS Glue 6.0의 JDBC 드라이버 버전 AWS Glue 5.1의 JDBC 드라이버 버전 AWS Glue 5.0의 JDBC 드라이버 버전
MySQL 8.0.33 8.0.33 8.0.33
Microsoft SQL Server 10.2.0 10.2.0 10.2.0
Oracle Database 23.4.0.24.05 23.3.0.23.09 23.3.0.23.09
PostgreSQL 42.7.3 42.7.3 42.7.3
Amazon Redshift

redshift-jdbc42-2.2.7

redshift-jdbc42-2.1.0.29

redshift-jdbc42-2.1.0.29

MariaDB 3.5.7 해당 사항 없음 해당 사항 없음

부록 C: 커넥터 업그레이드

다음은 커넥터 업그레이드입니다.

커넥터 AWS Glue 6.0 버전 AWS Glue 5.1 버전 AWS Glue 5.0 버전
Spark Redshift 6.7.0 6.4.2 6.4.0
Spark SQL Kinesis 2.1.0 해당 사항 없음 해당 사항 없음
MongoDB 11.0.1 10.3.0 10.3.0
Snowflake 3.17.0 3.1.1 3.0.0
OpenSearch 2.0.0 1.2.0 1.2.0
EMR DynamoDB 커넥터 6.1.0 5.7.0 5.6.0

부록 D: 오픈 테이블 형식 업그레이드

다음은 오픈 테이블 형식 업그레이드입니다.

OTF AWS Glue 6.0 버전 AWS Glue 5.1 버전 AWS Glue 5.0 버전 AWS Glue 4.0 버전
Hudi 1.1.1 1.0.2 0.15.0 0.12.1
Delta Lake 4.2.0 3.3.2 3.3.0 2.1.0
Iceberg 1.11.0 1.10.0 1.7.1 1.0.0