A E/S gerenciada permite que o Dataflow gerencie conectores de E/S específicos usados em pipelines do Apache Beam. A E/S gerenciada simplifica o gerenciamento de pipelines que se integram a origens e coletores com suporte.
A E/S gerenciada consiste em dois componentes que trabalham juntos:
Uma transformação do Apache Beam que fornece uma API comum para criar conectores de E/S (origens e coletores).
Um serviço do Dataflow que gerencia esses conectores de E/S em seu nome, incluindo a capacidade de fazer upgrade deles independentemente da versão do Apache Beam.
As vantagens da E/S gerenciada incluem:
Upgrades automáticos. O Dataflow faz upgrade automático dos conectores de E/S gerenciados no pipeline. Isso significa que seu pipeline recebe correções de segurança, melhorias de desempenho e correções de bugs para esses conectores, sem exigir mudanças no código. Para mais informações, consulte Upgrades automáticos.
API consistente. Tradicionalmente, os conectores de E/S no Apache Beam têm APIs distintas, e cada conector é configurado de maneira diferente. A E/S gerenciada oferece uma única API de configuração que usa propriedades de chave-valor, resultando em um código de pipeline mais simples e consistente. Para mais informações, consulte a API Configuration.
Requisitos
Os SDKs a seguir oferecem suporte à E/S gerenciada:
- SDK do Apache Beam para Java versão 2.58.0 ou mais recente.
- SDK do Apache Beam para Python versão 2.61.0 ou mais recente.
O serviço de back-end requer o Dataflow Runner v2. Se o Runner v2 não estiver ativado, o pipeline ainda será executado, mas não terá os benefícios do serviço de E/S gerenciado.
Upgrades automáticos
Os pipelines do Dataflow com conectores de E/S gerenciados usam automaticamente a versão confiável mais recente do conector, conforme mostrado abaixo:
Quando você envia um job, o Dataflow usa a versão mais recente do conector que foi testada e funciona bem.
Para jobs de streaming, o Dataflow verifica atualizações sempre que você inicia um job de substituição e usa automaticamente a versão mais recente conhecida como boa. O Dataflow faz essa verificação mesmo que você não mude nenhum código no job de substituição.
Não é necessário atualizar manualmente o conector ou a versão do Apache Beam do seu pipeline.
O diagrama a seguir mostra o processo de upgrade. O usuário cria um pipeline do Apache Beam usando a versão X do SDK. Quando o usuário envia o job, o Dataflow verifica a versão da E/S gerenciada e faz upgrade dela para a versão Y.
O processo de upgrade adiciona cerca de dois minutos ao tempo de inicialização de um job. Para
verificar o status das operações de E/S gerenciadas, procure
entradas de registro que incluam a string
"Managed Transform(s)
".
API Configuration
A E/S gerenciada é uma transformação do Apache Beam que fornece uma API consistente para configurar origens e coletores.
Para criar qualquer origem ou destino compatível com a E/S gerenciada, use a classe
Managed
em Java. Especifique qual origem ou coletor será instanciado
e transmita um conjunto de parâmetros de configuração, semelhante ao seguinte:
Map config = ImmutableMap.<String, Object>builder()
.put("config1", "abc")
.put("config2", 1);
pipeline.apply(Managed.read(/*Which source to read*/).withConfig(config))
.getSinglePCollection();
Também é possível transmitir parâmetros de configuração como um arquivo YAML. Para conferir um exemplo completo de código, consulte Ler do Apache Iceberg.
Destinos dinâmicos
Para alguns sinks, o conector de E/S gerenciado pode selecionar dinamicamente um destino com base nos valores de campo nos registros recebidos.
Para usar destinos dinâmicos, forneça uma string de modelo para o destino. A
string do modelo pode incluir nomes de campos entre chaves, como
"tables.{field1}"
. No momento da execução, o conector substitui o valor do campo de cada registro recebido para determinar o destino dele.
Por exemplo, suponha que seus dados tenham um campo chamado airport
. Você pode definir o
destino como "flights.{airport}"
. Se airport
=SFO
, o registro é gravado
em flights.SFO
. Para campos aninhados, use a notação de ponto. Por exemplo:
{top.middle.nested}
.
Filtragem
Talvez você queira filtrar determinados campos antes que eles sejam gravados na tabela de destino. Para sinks que oferecem suporte a destinos dinâmicos, use
o parâmetro drop
, keep
ou only
para essa finalidade. Esses parâmetros permitem
incluir metadados de destino nos registros de entrada, sem gravar os
metadados no destino.
É possível definir no máximo um desses parâmetros para um determinado sink.
Parâmetro de configuração | Tipo de dado | Descrição |
---|---|---|
drop |
lista de strings | Uma lista de nomes de campos a serem descartados antes de gravar no destino. |
keep |
lista de strings | Uma lista de nomes de campos a serem mantidos ao gravar no destino. Os outros campos são descartados. |
only |
string | O nome de exatamente um campo a ser usado como o registro de nível superior para gravar ao gravar no destino. Todos os outros campos são descartados. Esse campo precisa ser do tipo linha. |
Fontes e coletores compatíveis
A E/S gerenciada é compatível com as seguintes origens e coletores.