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에 대해 다시 컴파일합니다.
JavaConversions를CollectionConverters로 바꿉니다. -
[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-jars는NoSuchMethodError또는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 마이그레이션 설명서를 참조하세요.
-
Migration Guide: Spark Core
(Apache Spark 웹 사이트) -
Migration Guide: SQL, Datasets and DataFrame
(Apache Spark 웹 사이트) -
Migration Guide: Structured Streaming
(Apache Spark 웹 사이트) -
Upgrading PySpark
(Apache Spark 웹 사이트)
이전 AWS Glue 버전에서 AWS Glue 6.0으로 마이그레이션
-
AWS Glue 5.0에서 AWS Glue 5.1로의 마이그레이션 단계는 AWS Glue 5.0에서 AWS Glue 5.1으로 마이그레이션 섹션을 참조하세요.
-
AWS Glue 4.0에서 AWS Glue 5.0으로의 마이그레이션 단계는 AWS Glue 4.0에서 AWS Glue 5.0으로 마이그레이션 섹션을 참조하세요.
-
AWS Glue 3.0에서 AWS Glue 5.0으로의 마이그레이션 단계는 AWS Glue 3.0에서 AWS Glue 5.0으로 마이그레이션 섹션을 참조하세요.
-
AWS Glue 2.0에서 AWS Glue 5.0으로의 마이그레이션 단계는 AWS Glue 2.0에서 AWS Glue 5.0으로 마이그레이션 섹션을 참조하세요.
-
위의 단계를 완료한 후 AWS Glue 5.1에서 AWS Glue 6.0으로 마이그레이션에 따라 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 |