In Cloud Storage in Dataflow lesen

Verwenden Sie zum Lesen von Daten aus Cloud Storage in Dataflow den E/A-Connector TextIO oder AvroIO von Apache Beam.

Google Cloud-Bibliotheksabhängigkeit einschließen

Schließen Sie die folgende Abhängigkeit ein, um den TextIO- oder AvroIO-Connector mit Cloud Storage zu verwenden. Diese Bibliothek bietet einen Schema-Handler für "gs://"-Dateinamen.

Java

<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
  <version>${beam.version}</version>
</dependency>

Python

apache-beam[gcp]==VERSION

Einfach loslegen (Go)

import _ "github.com/apache/beam/sdks/v2/go/pkg/beam/io/filesystem/gcs"

Weitere Informationen finden Sie unter Apache Beam SDK installieren.

Parallelität

Die Connectors TextIO und AvroIO unterstützen zwei Parallelitätsebenen:

  • Einzelne Dateien werden separat verschlüsselt, damit mehrere Worker sie lesen können.
  • Wenn die Dateien nicht komprimiert sind, kann der Connector Unterbereiche jeder Datei separat lesen. Dies führt zu einem sehr hohen Parallelitätsgrad. Diese Aufteilung ist nur möglich, wenn jede Zeile in der Datei ein aussagekräftiger Datensatz ist. Beispielsweise ist sie für JSON-Dateien nicht standardmäßig verfügbar.

Leistung

Die folgende Tabelle enthält Leistungsmesswerte zum Lesen aus Cloud Storage. Die Arbeitslasten wurden auf einem e2-standard2-Worker mit dem Apache Beam SDK 2.49.0 für Java ausgeführt. Sie haben nicht Runner v2 verwendet.

100 Mio. Datensätze | 1 KB | 1 Spalte Durchsatz (Byte) Durchsatz (Elemente)
Lesen 320 Mbit/s 320.000 Elemente pro Sekunde

Diese Messwerte basieren auf einfachen Batchpipelines. Sie sollen die Leistung von E/A-Connectors vergleichen und sind nicht unbedingt repräsentativ für reale Pipelines. Die Leistung der Dataflow-Pipeline ist komplex und eine Funktion des VM-Typs, der verarbeiteten Daten, der Leistung externer Quellen und Senken sowie des Nutzercodes. Messwerte basieren auf der Ausführung des Java SDK und sind nicht repräsentativ für die Leistungsmerkmale anderer Sprach-SDKs. Weitere Informationen finden Sie unter Leistung von Beam IO.

Best Practices

  • Vermeiden Sie die Verwendung von watchForNewFiles mit Cloud Storage. Dieser Ansatz wird bei großen Produktionspipelines schlecht skaliert, da der Connector eine Liste der gesehenen Dateien im Speicher aufbewahren muss. Die Liste kann nicht aus dem Speicher gelöscht werden, wodurch sich der Arbeitsspeicher der Worker im Laufe der Zeit reduziert. Verwenden Sie stattdessen Pub/Sub-Benachrichtigungen für Cloud Storage. Weitere Informationen finden Sie unter Dateiverarbeitungsmuster.

  • Wenn sowohl der Dateiname als auch der Dateiinhalt nützliche Daten sind, verwenden Sie die Klasse FileIO, um Dateinamen zu lesen. Ein Dateiname kann beispielsweise Metadaten enthalten, die für die Verarbeitung der Daten in der Datei nützlich sind. Weitere Informationen finden Sie unter Auf Dateinamen zugreifen. Die Dokumentation zu FileIO enthält auch ein Beispiel für dieses Muster.

Nächste Schritte