La E/S gestionada permite a Dataflow gestionar conectores de E/S específicos que se usan en flujos de procesamiento de Apache Beam. La entrada/salida gestionada simplifica la gestión de las pipelines que se integran con las fuentes y los receptores compatibles.
La E/gestionada consta de dos componentes que funcionan en conjunto:
Una transformación de Apache Beam que proporciona una API común para crear conectores de E/S (fuentes y receptores).
Un servicio de Dataflow que gestiona estos conectores de E/S en tu nombre, incluida la posibilidad de actualizarlos independientemente de la versión de Apache Beam.
Estas son algunas de las ventajas de la E/gestionada:
Actualizaciones automáticas. Dataflow actualiza automáticamente los conectores de entrada/salida gestionados de tu canalización. Esto significa que tu canalización recibe correcciones de seguridad, mejoras de rendimiento y correcciones de errores para estos conectores sin necesidad de cambiar el código. Para obtener más información, consulta Actualizaciones automáticas.
API coherente. Tradicionalmente, los conectores de entrada/salida de Apache Beam tienen APIs distintas y cada conector se configura de una forma diferente. Managed I/O proporciona una única API de configuración que usa propiedades de clave-valor, lo que da como resultado un código de canalización más sencillo y coherente. Para obtener más información, consulte la API Configuration.
Requisitos
Los siguientes SDKs admiten la entrada/salida gestionada:
- Versión 2.58.0 o posterior del SDK de Apache Beam para Java.
- La versión 2.61.0 (o una posterior) del SDK de Apache Beam para Python.
El servicio de backend requiere Dataflow Runner v2. Si Runner v2 no está habilitado, tu canalización seguirá ejecutándose, pero no obtendrá las ventajas del servicio de E/S gestionado.
Actualizaciones automáticas
Los flujos de procesamiento de Dataflow con conectores de E/S gestionados usan automáticamente la versión fiable más reciente del conector, de la siguiente manera:
Cuando envías una tarea, Dataflow usa la versión más reciente del conector que se ha probado y funciona correctamente.
En el caso de las tareas de streaming, Dataflow busca actualizaciones cada vez que inicias una tarea de sustitución y usa automáticamente la última versión correcta conocida. Dataflow realiza esta comprobación aunque no cambies ningún código en el trabajo de sustitución.
No tendrás que preocuparte por actualizar manualmente el conector ni la versión de Apache Beam de tu canalización.
En el siguiente diagrama se muestra el proceso de actualización. El usuario crea una pipeline de Apache Beam con la versión X del SDK. Cuando el usuario envía el trabajo, Dataflow comprueba la versión de la E/S gestionada y la actualiza a la versión Y.
El proceso de actualización añade unos dos minutos al tiempo de inicio de un trabajo. Para comprobar el estado de las operaciones de E/S gestionadas, busca entradas de registro que incluyan la cadena "Managed Transform(s)
".
API Configuration
Managed I/O es una transformación de Apache Beam lista para usar que proporciona una API coherente para configurar fuentes y receptores.
Java
Para crear cualquier fuente o receptor compatible con la E/S gestionada, se usa la clase Managed
. Especifica qué fuente o receptor quieres crear y pasa un conjunto de parámetros de configuración, como se muestra a continuación:
Map config = ImmutableMap.<String, Object>builder()
.put("config1", "abc")
.put("config2", 1);
pipeline.apply(Managed.read(/*Which source to read*/).withConfig(config))
.getSinglePCollection();
También puedes transferir parámetros de configuración como un archivo YAML. Para ver un ejemplo de código completo, consulta Leer de Apache Iceberg.
Python
Importa el módulo apache_beam.transforms.managed
y llama al método managed.Read
o managed.Write
. Especifica qué fuente o receptor quieres crear y pasa un conjunto de parámetros de configuración, como en el siguiente ejemplo:
pipeline
| beam.managed.Read(
beam.managed.SOURCE, # Example: beam.managed.KAFKA
config={
"config1": "abc",
"config2": 1
}
)
También puedes transferir parámetros de configuración como un archivo YAML. Para ver un ejemplo de código completo, consulta Leer desde Apache Kafka.
Destinos dinámicos
En algunos receptores, el conector de E/S gestionado puede seleccionar dinámicamente un destino en función de los valores de los campos de los registros entrantes.
Para usar destinos dinámicos, proporcione una cadena de plantilla para el destino. La cadena de plantilla puede incluir nombres de campos entre llaves, como "tables.{field1}"
. En el tiempo de ejecución, el conector sustituye el valor del campo por cada registro entrante para determinar el destino de ese registro.
Por ejemplo, supongamos que sus datos tienen un campo llamado airport
. Podrías definir el destino como "flights.{airport}"
. Si airport
=SFO
, el registro se escribe en flights.SFO
. En el caso de los campos anidados, usa la notación de puntos. Por ejemplo:
{top.middle.nested}
.
Para ver un código de ejemplo que muestra cómo usar destinos dinámicos, consulta Escribir con destinos dinámicos.
Filtrado
Puede que quieras excluir determinados campos antes de que se escriban en la tabla de destino. En los receptores que admiten destinos dinámicos, puede usar los parámetros drop
, keep
o only
para este fin. Estos parámetros te permiten incluir metadatos de destino en los registros de entrada sin escribir los metadatos en el destino.
Puedes definir como máximo uno de estos parámetros para un receptor determinado.
Parámetro de configuración | Tipo de datos | Descripción |
---|---|---|
drop |
lista de cadenas | Lista de nombres de campos que se van a eliminar antes de escribir en el destino. |
keep |
lista de cadenas | Lista de nombres de campos que se conservarán al escribir en el destino. Se omiten los demás campos. |
only |
cadena | El nombre de exactamente un campo que se usará como registro de nivel superior para escribir en el destino. El resto de los campos se descartan. Este campo debe ser de tipo fila. |
Fuentes y sumideros admitidos
La entrada/salida gestionada admite los siguientes orígenes y receptores.
Para obtener más información, consulta la sección sobre conectores de entrada/salida gestionados en la documentación de Apache Beam.