Per leggere i dati da Cloud Storage a Dataflow, utilizza il connettore I/O TextIO
o AvroIO
di Apache Beam.
Includi la dipendenza della libreria Google Cloud
Per utilizzare il connettore TextIO
o AvroIO
con Cloud Storage, includi la dipendenza riportata di seguito. Questa libreria fornisce un gestore dello schema per i nomi file di "gs://"
.
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
Go
import _ "github.com/apache/beam/sdks/v2/go/pkg/beam/io/filesystem/gcs"
Per maggiori informazioni, consulta Installare l'SDK Apache Beam.
Parallelismo
I connettori TextIO
e AvroIO
supportano due livelli di parallelismo:
- I singoli file vengono digitati separatamente, in modo che più worker possano leggerli.
- Se i file non sono compressi, il connettore può leggere i sottointervalli di ogni file separatamente, portando a un livello molto elevato di parallelismo. Questa suddivisione è possibile solo se ogni riga del file è un record significativo. Ad esempio, non è disponibile per impostazione predefinita per i file JSON.
Prestazioni
La tabella seguente mostra le metriche delle prestazioni per la lettura da Cloud Storage. I carichi di lavoro sono stati eseguiti su un worker e2-standard2
,
utilizzando l'SDK Apache Beam 2.49.0 per Java. Non hanno utilizzato Runner v2.
100 M di record | 1 kB | 1 colonna | Velocità effettiva (byte) | Velocità effettiva (elementi) |
---|---|---|
Lettura | 320 Mbps | 320.000 elementi al secondo |
Queste metriche si basano su semplici pipeline in modalità batch. Hanno lo scopo di confrontare le prestazioni dei connettori I/O e non sono necessariamente rappresentativi di pipeline reali. Le prestazioni della pipeline Dataflow sono complesse e dipendono dal tipo di VM, dai dati in elaborazione, dalle prestazioni di origini e sink esterne e dal codice utente. Le metriche si basano sull'esecuzione dell'SDK Java e non sono rappresentative delle caratteristiche delle prestazioni degli SDK di altri linguaggi. Per maggiori informazioni, consulta Prestazioni dell'IO Beam.
best practice
Evita di utilizzare
watchForNewFiles
con Cloud Storage. Questo approccio consente una scalabilità insoddisfacente per le pipeline di produzione di grandi dimensioni, in quanto il connettore deve mantenere in memoria un elenco dei file rilevati. L'elenco non può essere cancellato dalla memoria, il che riduce la memoria operativa dei worker nel tempo. Prendi in considerazione l'utilizzo delle notifiche Pub/Sub per Cloud Storage. Per ulteriori informazioni, consulta la sezione Pattern di elaborazione dei file.Se sia il nome file che i contenuti del file sono dati utili, utilizza la classe
FileIO
per leggere i nomi file. Ad esempio, un nome file potrebbe contenere metadati utili durante l'elaborazione dei dati nel file. Per ulteriori informazioni, consulta la sezione Accesso ai nomi file. Anche la documentazione diFileIO
mostra un esempio di questo pattern.
Passaggi successivi
- Leggi la documentazione dell'API
TextIO
. - Consulta l'elenco dei modelli forniti da Google.