Para ler dados do Cloud Storage para Dataflow, use o
conector de E/S TextIO
ou
AvroIO
do Apache Beam.
Incluir a dependência da biblioteca do Google Cloud
Para usar o conector TextIO
ou AvroIO
com o Cloud Storage, inclua a
dependência a seguir. Essa biblioteca fornece um gerenciador de esquema para os nomes de arquivo "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"
Para mais informações, consulte Instalar o SDK do Apache Beam.
Paralelismo
Os conectores TextIO
e AvroIO
são compatíveis com dois níveis de paralelismo:
- Os arquivos individuais são codificados separadamente para que vários workers possam lê-los.
- Se os arquivos não estiverem compactados, o conector consegue ler os subintervalos de cada arquivo separadamente, levando a um nível muito alto de paralelismo. Essa divisão só é possível se cada linha do arquivo for um registro significativo. Por exemplo, por padrão, ele está indisponível para arquivos JSON.
Desempenho
A tabela a seguir mostra as métricas de desempenho de leitura do
Cloud Storage. As cargas de trabalho foram executadas em um worker e2-standard2
usando o SDK do Apache Beam 2.49.0 para Java. Eles não usaram o Runner v2.
100 milhões de registros | 1 KB | 1 coluna | Capacidade de processamento (bytes) | Capacidade de processamento (elementos) |
---|---|---|
Ler | 320 MBps | 320.000 elementos por segundo |
Essas métricas são baseadas em pipelines de lote simples. Elas servem para comparar o desempenho entre conectores de E/S e não representam necessariamente pipelines reais. O desempenho do pipeline do Dataflow é complexo e depende do tipo de VM, dos dados processados, do desempenho de origens e coletores externos e do código do usuário. As métricas se baseiam na execução do SDK do Java e não representam as características de desempenho de outros SDKs da linguagem. Para mais informações, confira Desempenho do E/S do Beam.
Práticas recomendadas
Evite usar o
watchForNewFiles
com o Cloud Storage. Essa abordagem não é bem escalonada para grandes pipelines de produção porque o conector precisa manter uma lista dos arquivos vistos na memória. A lista não pode ser liberada da memória, o que reduz a memória de trabalho dos workers ao longo do tempo. Considere usar as notificações do Pub/Sub para o Cloud Storage. Para mais informações, confira Padrões de processamento de arquivos.Se o nome e o conteúdo do arquivo forem dados úteis, use a classe
FileIO
para ler os nomes de arquivos. Por exemplo, um nome de arquivo pode conter metadados úteis ao processar os dados no arquivo. Para mais informações, confira Como acessar nomes de arquivos. A documentação doFileIO
também mostra um exemplo desse padrão.
A seguir
- Leia a documentação da API
TextIO
. - Confira a lista de modelos fornecidos pelo Google.