AWS Glue에서 Avro 형식 사용 - AWS Glue

AWS Glue에서 Avro 형식 사용

AWS Glue는 소스에서 데이터를 검색하고 다양한 데이터 형식으로 저장 및 전송되는 대상에 데이터를 씁니다. 데이터가 Avro 데이터 형식으로 저장 또는 전송되는 경우 이 문서에서는 AWS Glue에서 데이터를 사용하는 데 사용할 수 있는 기능을 소개합니다.

AWS Glue는 Avro 형식 사용을 지원합니다. 이 형식은 성능 중심의 행 기반 데이터 형식입니다. 표준 기관의 형식에 대한 소개는 Apache Avro 1.8.2 설명서 개요를 참조하세요.

AWS Glue를 사용하여 Amazon S3와 스트리밍 소스에서 Avro 파일을 읽을 수 있을 뿐만 아니라 Amazon S3에 Avro 파일을 쓸 수 있습니다. S3에서 Avro 파일이 포함된 bzipgzip 아카이브를 읽고 쓸 수 있습니다. 이 페이지에서 설명하는 구성 대신 Amazon S3 연결에서 압축 동작을 구성할 수 있습니다.

다음 표에서는 Avro 형식 옵션을 지원하는 일반적인 AWS Glue 기능을 보여 줍니다.

읽기(Read) 쓰기 스트리밍 읽기 작은 파일 그룹화 작업 북마크
지원 지원 지원 지원되지 않음 지원

예: S3에서 Avro 파일 또는 폴더 읽기

사전 조건: 읽으려는 Avro 파일 또는 폴더에 대한 S3 경로(s3path)가 필요합니다.

구성: 함수 옵션에서 format="avro"를 지정합니다. connection_options에서 paths 키를 사용하여 s3path를 지정합니다. connection_options에서 리더와 S3가 상호 작용하는 방식을 구성할 수 있습니다. 자세한 내용은 AWS Glue: "connectionType": "s3"의 ETL 입력 및 출력에 대한 데이터 형식 옵션을 참조하세요. 리더에서 format_options의 Avro 파일을 해석하는 방법을 구성할 수 있습니다. 자세한 내용은 Avro 구성 참조를 참조하세요.

다음 AWS Glue ETL 스크립트는 S3에서 Avro 파일 또는 폴더를 읽는 프로세스를 보여 줍니다.

Python

이 예에서는 create_dynamic_frame.from_options 메서드를 사용합니다.

from pyspark.context import SparkContext from awsglue.context import GlueContext sc = SparkContext.getOrCreate() glueContext = GlueContext(sc) dynamicFrame = glueContext.create_dynamic_frame.from_options( connection_type="s3", connection_options={"paths": ["s3://s3path"]}, format="avro" )
Scala

이 예에서는 getSourceWithFormat 작업을 사용합니다.

import com.amazonaws.services.glue.util.JsonOptions import com.amazonaws.services.glue.GlueContext import org.apache.spark.sql.SparkContext object GlueApp { def main(sysArgs: Array[String]): Unit = { val spark: SparkContext = new SparkContext() val glueContext: GlueContext = new GlueContext(spark) val dynamicFrame = glueContext.getSourceWithFormat( connectionType="s3", format="avro", options=JsonOptions("""{"paths": ["s3://s3path"]}""") ).getDynamicFrame() }

예: S3에 Avro 파일 및 폴더 쓰기

사전 조건: 초기화된 DataFrame(dataFrame) 또는 DynamicFrame(dynamicFrame)이 필요합니다. 예상되는 S3 출력 경로(s3path)도 필요합니다.

구성: 함수 옵션에서 format="avro"를 지정합니다. connection_options에서 paths 키를 사용하여 s3path를 지정합니다. connection_options에서 라이터가 S3와 상호 작용하는 방식을 추가로 변경할 수 있습니다. 자세한 내용은 AWS Glue: "connectionType": "s3"의 ETL 입력 및 출력에 대한 데이터 형식 옵션을 참조하세요. 작가가 format_options에서 Avro 파일을 해석하는 방식을 변경할 수 있습니다. 자세한 내용은 Avro 구성 참조를 참조하세요.

다음 AWS Glue ETL 스크립트는 S3로 Avro 파일 및 폴더를 쓰는 프로세스를 보여줍니다.

Python

이 예에서는 write_dynamic_frame.from_options 메서드를 사용합니다.

from pyspark.context import SparkContext from awsglue.context import GlueContext sc = SparkContext.getOrCreate() glueContext = GlueContext(sc) glueContext.write_dynamic_frame.from_options( frame=dynamicFrame, connection_type="s3", format="avro", connection_options={ "path": "s3://s3path" } )
Scala

이 예에서는 getSinkWithFormat 메서드를 사용합니다.

import com.amazonaws.services.glue.util.JsonOptions import com.amazonaws.services.glue.{DynamicFrame, GlueContext} import org.apache.spark.SparkContext object GlueApp { def main(sysArgs: Array[String]): Unit = { val spark: SparkContext = new SparkContext() val glueContext: GlueContext = new GlueContext(spark) glueContext.getSinkWithFormat( connectionType="s3", options=JsonOptions("""{"path": "s3://s3path"}"""), format="avro" ).writeDynamicFrame(dynamicFrame) } }

Avro 구성 참조

AWS Glue 라이브러리가 format="avro"를 지정한 곳이라면 어디에서든 다음 format_options 값을 사용할 수 있습니다.

  • version - 지원하는 Apache Avro 리더/라이터 포맷의 버전을 지정합니다. 기본값은 "1.7"입니다. format_options={"version": “1.8”}를 지정해 Avro 논리적 유형 읽기 및 쓰기를 활성화할 수 있습니다. 자세한 내용은 Apache Avro 1.7.7 사양Apache Avro 1.8.2 사양을 참조하십시오.

    Apache Avro 1.8 커넥터는 다음과 같은 논리적 유형 변환을 지원합니다.

리더의 경우: 다음 테이블은 Avro 리더 1.7 및 1.8을 위한 Avro 데이터 유형(논리적 유형, Avro 기본 유형)과 AWS Glue DynamicFrame 데이터 유형 간 변환을 보여줍니다.

Avro 데이터 유형:

논리적 유형

Avro 데이터 유형:

Avro 기본 유형

GlueDynamicFrame 데이터 유형:

Avro 리더 1.7

GlueDynamicFrame 데이터 유형:

Avro 리더 1.8

Decimal bytes BINARY Decimal
Decimal 고정 BINARY Decimal
날짜 int INT 날짜
시간(밀리초) int INT INT
시간(마이크로초) long LONG LONG
타임스탬프(밀리초) long LONG 타임스탬프
타임스탬프(마이크로초) long LONG LONG
기간(논리적 유형 아님) 고정(12) BINARY BINARY

라이터의 경우: 다음 테이블은 Avro 라이터 1.7 및 1.8을 위한 AWS Glue DynamicFrame 데이터 유형과 Avro 데이터 유형 간 변환을 보여줍니다.

AWS Glue DynamicFrame 데이터 유형 Avro 데이터 유형:

Avro 라이터 1.7

Avro 데이터 유형:

Avro 라이터 1.8

Decimal 문자열 decimal
날짜 문자열 날짜
타임스탬프 문자열 timestamp-micros

Avro Spark DataFrame 지원

Spark DataFrame API에서 Avro를 사용하려면 해당 Spark 버전에 대한 Spark Avro 플러그인을 설치해야 합니다. 작업에서 사용할 수 있는 Spark 버전은 AWS Glue 버전에 따라 결정됩니다. Spark 버전에 대한 자세한 내용은 AWS Glue 버전 섹션을 참조하세요. 이 플러그인은 Apache에서 유지 관리하며 구체적인 지원을 보장하지는 않습니다.

AWS Glue 2.0에서 - Spark Avro 플러그인의 버전 2.4.3을 사용하세요. 이 JAR는 Maven Central에서 찾을 수 있습니다. org.apache.spark:spark-avro_2.12:2.4.3을 참조하세요.

AWS Glue 3.0에서 - Spark Avro 플러그인의 버전 3.1.1을 사용하세요. 이 JAR는 Maven Central에서 찾을 수 있습니다. org.apache.spark:spark-avro_2.12:3.1.1을 참조하세요.

추가 JAR을 AWS Glue ETL 작업에 포함하려면 --extra-jars 작업 파라미터를 사용하세요. 작업 파라미터에 대한 자세한 내용을 알아보려면 AWS Glue에서 사용하는 작업 파라미터 섹션을 참조하세요. AWS Management Console에서 이 매개 변수를 구성할 수도 있습니다.