Verwenden des Avro-Formats in AWS-Glue - AWS Glue

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden des Avro-Formats in AWS-Glue

AWS-Glue ruft Daten aus Quellen ab und schreibt Daten an Ziele, die in verschiedenen Datenformaten gespeichert und transportiert werden. Wenn Ihre Daten im Avro-Datenformat gespeichert oder transportiert werden, stellt Ihnen dieses Dokument die verfügbaren Features zur Verwendung Ihrer Daten in AWS-Glue vor.

AWS-Glue unterstützt die Verwendung des Avro-Formats. Dieses Format ist ein leistungsorientiertes, zeilenbasiertes Datenformat. Eine Einführung in das Format durch die Standardautorität finden Sie unter der Apache-Avro 1.8.2 Dokumentation.

Sie können AWS-Glue verwenden, um Avro-Dateien aus Amazon S3 und aus Streaming-Quellen zu lesen und um Avro-Dateien in Amazon S3 zu schreiben. Sie können bzip2- und gzip-Archive mit Avro-Dateien aus S3 lesen und schreiben. Darüber hinaus können Sie deflate-, snappy-, und xz-Archive schreiben, die Avro-Dateien enthalten. Sie konfigurieren das Komprimierungsverhalten auf S3-Verbindungsparameter statt in der auf dieser Seite besprochenen Konfiguration.

Die folgende Tabelle zeigt, welche gängigen AWS-Glue-Operationen die Option Avro-Format unterstützen.

Lesen Write (Schreiben) Streaming gelesen Gruppieren von kleinen Dateien Auftrags-Lesezeichen
Unterstützt Unterstützt Unterstützt* Nicht unterstützt Unterstützt

*Mit Einschränkungen unterstützt. Weitere Informationen finden Sie unter Hinweise und Einschränkungen für Avro-Streaming-Quellen.

Beispiel: Lesen von Avro-Dateien oder Ordnern aus S3

Voraussetzungen: Sie benötigen die S3-Pfade (s3path) zu den Avro-Dateien oder Ordnern, die Sie lesen möchten.

Konfiguration: Geben Sie in Ihren Funktionsoptionen format="avro" an. Verwenden Sie in Ihrem connection_options den paths-Schlüssel, um s3path anzugeben. Sie können konfigurieren, wie der Reader mit S3 in der connection_options interagiert. Weitere Formate finden Sie unter Mögliche Formate für ETL-Eingaben und -Ausgaben in AWS Glue: Referenz zur Amazon-S3-Verbindungsoption. Sie können konfigurieren, wie der Reader Avro-Dateien in Ihrem format_options interpretiert. Einzelheiten finden Sie in der Avro-Konfigurationsreferenz.

Das folgende AWS-Glue-ETL-Skript zeigt den Prozess des Lesens von Avro-Dateien oder -Ordnern aus S3:

Python

Verwenden Sie für dieses Beispiel die Methode 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

Verwenden Sie für dieses Beispiel die Operation 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() }

Beispiel: Schreiben von Avro-Dateien und -Ordnern in S3

Voraussetzungen: Sie benötigen einen initialisierten DataFrame (dataFrame) oder DynamicFrame (dynamicFrame). Sie benötigen auch Ihren erwarteten S3-Ausgabepfad, s3path.

Konfiguration: Geben Sie in Ihren Funktionsoptionen format="avro" an. Verwenden Sie in Ihrem connection_options den paths-Schlüssel, um Ihren s3path anzugeben. Sie können die Art und Weise, wie der Writer mit S3 in connection_options interagiert, weiter verändern. Weitere Formate finden Sie unter Mögliche Formate für ETL-Eingaben und -Ausgaben in AWS Glue: Referenz zur Amazon-S3-Verbindungsoption. Sie können ändern, wie der Schreiber Avro-Dateien in Ihren format_options interpretiert. Einzelheiten finden Sie in der Avro-Konfigurationsreferenz.

Das folgende AWS-Glue-ETL-Skript zeigt den Prozess des Schreibens von Avro-Dateien für Ordnern in S3.

Python

Verwenden Sie für dieses Beispiel die Methode 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

Wählen Sie für dieses Beispiel die Methode 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-Konfigurationsreferenz

Sie können die folgenden format_options-Werte überall verwenden, wo AWS-Glue-Bibliotheken format="avro" angibt:

  • version – Gibt die zu unterstützende Version des Apache Avro Reader/Writer-Formats an. Der Standardwert ist "1.7". Sie können format_options={"version": “1.8”} angeben, um das Lesen und Schreiben des logischen Avro-Typs zu ermöglichen. Weitere Informationen finden Sie unter Apache Avro 1.7.7 Specification und Apache Avro 1.8.2 Specification.

    Der Apache Avro 1.8-Konnektor unterstützt die folgenden Konvertierungen für logische Typen:

Für den Reader zeigt diese Tabelle die Konvertierung zwischen Avro-Datentyp (logischer Typ und primitiver Avro-Typ) und dem Datentyp AWS Glue DynamicFrame für Avro Reader 1.7 und 1.8 an.

Avro-Datentyp:

Logischer Typ

Avro-Datentyp:

Primitiver Avro-Typ

GluedyNamicFrame-Datentyp:

Avro Reader 1.7

GluedyNamicFrame-Datentyp:

Avro Reader 1.8

Dezimal bytes BINARY Dezimal
Dezimal Fixed BINARY Dezimal
Datum int INT Datum
Zeit (Millisekunde) int INT INT
Zeit (Mikrosekunde) long LONG LONG
Zeitstempel (Millisekunde) long LONG Zeitstempel
Zeitstempel (Mikrosekunde) long LONG LONG
Dauer (kein logischer Typ) Fixed von 12 BINARY BINARY

Für Writer zeigt diese Tabelle die Konvertierung zwischen dem Datentyp AWS Glue DynamicFrame und dem Avro-Datentyp für Avro Writer 1.7 und 1.8 an.

AWS GlueDatentypDynamicFrame Avro-Datentyp:

Avro Writer 1.7

Avro-Datentyp:

Avro Writer 1.8

Dezimal String Dezimalwert
Datum String date
Zeitstempel String timestamp-micros

Avro-Spark-DataFrame-Unterstützung

Um Avro über die Spark-DataFrame-API verwenden zu können, müssen Sie das Spark Avro-Plugin für die entsprechende Spark-Version installieren. Die in Ihrem Job verfügbare Version von Spark wird von Ihrer AWS Glue-Version festgelegt. Weitere Informationen zu den Spark-Versionen erhalten Sie unter AWS Glue-Versionen. Dieses Plugin wird von Apache verwaltet, wir geben keine spezifischen Garantien für den Support.

In AWS Glue 2.0 - Verwenden von Version 2.4.3 des Spark Avro-Plugins. Sie finden dieses JAR auf Maven Central, siehe org.apache.spark:spark-avro_2.12:2.4.3.

In AWS Glue 3.0 - Verwenden von Version 3.1.1 des Spark Avro-Plugins. Sie finden dieses JAR auf Maven Central, siehe org.apache.spark:spark-avro_2.12:3.1.1.

Zum hinzufügen zusätzlicher JARs in einen AWS-Glue-ETL-Auftrag verwenden Sie die --extra-jars-Jobparameter. Informationen zu Auftragsparametern finden Sie unter Verwendung von Auftragsparametern in AWS-Glue-Aufträgen. Sie können diesen Parameter auch in AWS-Managementkonsole konfigurieren.