Construyendo un procesador Python usando Apache NiFi 2.0.0

El procesador Python integrado en la última versión de Apache NiFi simplifica las tareas de procesamiento de datos, aumenta la flexibilidad y acelera el desarrollo.

Traducido de Apache NiFi 2.0.0: Creación de procesadores Python , autor Robert Kimani.

Apache NiFi es una poderosa plataforma dedicada a la gestión del flujo de datos , que proporciona muchas funciones diseñadas para aumentar la eficiencia y flexibilidad del procesamiento de datos. Su interfaz de usuario basada en web proporciona una experiencia perfecta para diseñar, controlar y monitorear flujos de datos.

NiFi admite la creación de extensiones y procesadores personalizados, lo que permite a los usuarios adaptar la plataforma a sus necesidades específicas.

Con una experiencia de usuario multiinquilino, NiFi garantiza que varios usuarios puedan interactuar con el sistema simultáneamente, cada uno con su propio conjunto de derechos de acceso.

El controlador Python proporciona una forma poderosa de ampliar la funcionalidad de NiFi, permitiendo a los usuarios aprovechar un rico ecosistema de bibliotecas y herramientas de Python en sus flujos de datos. Aquí, analizamos los beneficios de incorporar Python en los flujos de trabajo de NiFi y exploramos casos de uso del mundo real donde los procesadores Python pueden simplificar las tareas de procesamiento de datos, aumentar la flexibilidad y acelerar el desarrollo.

Ya sea que desee integrar algoritmos de aprendizaje automático, realizar transformaciones de datos personalizadas o interactuar con sistemas externos, crear un procesador Python en Apache NiFi puede ayudarlo a satisfacer estas necesidades de integración de datos.

Una característica destacada de NiFi es su naturaleza altamente configurable, que permite a los usuarios adaptar el enrutamiento de datos, la transformación y la lógica de mediación del sistema a sus requisitos específicos. NiFi ayuda a los usuarios a lograr los resultados de procesamiento de datos que desean, como priorizar la tolerancia a fallas sobre la entrega garantizada u optimizar una baja latencia sobre un alto rendimiento.

La priorización dinámica permite ajustes en tiempo real a la prioridad de los datos en una secuencia, mientras que la capacidad de modificar secuencias en tiempo de ejecución agrega una capa de flexibilidad para adaptarse a las necesidades cambiantes. NiFi también incorpora un mecanismo de contrapresión para regular las tasas de flujo de datos y evitar la sobrecarga, lo que garantiza un funcionamiento fluido y eficiente incluso bajo cargas de trabajo variables.

NiFi está diseñado para admitir escalado vertical y horizontal. Ya sea escalando para aprovechar toda la potencia de una sola máquina o utilizando un modelo de clúster sin líder, NiFi puede adaptarse a tareas de procesamiento de datos de cualquier tamaño.

La procedencia de los datos es otra característica clave que permite a los usuarios rastrear el viaje de los datos desde su origen hasta su destino final. Esto proporciona información valiosa para auditar, solucionar problemas y garantizar la integridad de los datos durante todo el proceso.

La seguridad es primordial en NiFi, que admite SSL, SSH, HTTPS y contenido cifrado, entre otras medidas de seguridad. Los mecanismos de autenticación y autorización conectables y detallados basados ​​en roles garantizan que el acceso a los flujos de datos se controle cuidadosamente, lo que permite que varios equipos administren y compartan de forma segura partes específicas del flujo.

La filosofía de diseño de NiFi, inspirada en conceptos como la programación basada en flujo y la arquitectura basada en eventos por etapas , ofrece varias ventajas convincentes:

  • Interfaz visual intuitiva para diseñar y gestionar flujos de datos, mejorando la productividad y la facilidad de uso.
  • Modelo de procesamiento asincrónico que admite alto rendimiento y almacenamiento en búfer natural para adaptarse a cargas fluctuantes.
  • La gestión de concurrencia incorporada abstrae la complejidad de la programación multiproceso.
  • Énfasis en la reutilización y capacidad de prueba de los componentes, promoviendo métodos de diseño modulares y robustos.
  • El soporte nativo para la contrapresión y el manejo de errores garantiza solidez y confiabilidad en las canalizaciones de procesamiento de datos.
  • Obtenga una comprensión integral de la dinámica del flujo de datos para un monitoreo y resolución de problemas efectivos.

¿Por qué utilizar compilaciones de Python en Apache NiFi?

Apache NiFi es una poderosa herramienta para la ingesta, transformación y enrutamiento de datos. El procesador Python en NiFi proporciona una forma flexible de ampliar su funcionalidad, especialmente para procesar datos no estructurados o integrarse con sistemas externos como modelos de IA o almacenes de vectores como la base de datos de vectores nativa de la nube Milvus .

Cuando se trata de tipos de archivos no estructurados que herramientas como Cloudera Data Flow pueden extraer, los procesadores Python son fundamentales para implementar una lógica personalizada para analizar y manipular los datos. Por ejemplo, puede utilizar Python para extraer información específica de archivos de texto, realizar análisis de opiniones sobre datos de texto o preprocesar imágenes antes de realizar más análisis.

Por otro lado, los tipos de archivos estructurados a menudo se pueden procesar utilizando el procesador integrado de NiFi sin la necesidad de un código Python personalizado. NiFi proporciona una amplia gama de procesadores para procesar formatos de datos estructurados como CSV, JSON, Avro y para interactuar con bases de datos , API y otros sistemas empresariales.

Cuando necesita interactuar con modelos de IA u otros sistemas externos como Milvus, el procesador Python proporciona una manera conveniente de integrar esta funcionalidad en su flujo de datos NiFi. Para tareas como el procesamiento de texto a texto, texto a imagen o texto a voz, puede escribir código Python para interactuar con el modelo o servicio relevante e incorporar este procesamiento en su canal NiFi.

Python: una nueva era en NiFi 2.0.0

Apache NiFi 2.0.0 trae algunas mejoras importantes a la plataforma, especialmente en términos de integración de Python y mejoras de rendimiento. La capacidad de integrar perfectamente scripts de Python en flujos de datos NiFi abre una amplia gama de posibilidades para trabajar con una variedad de fuentes de datos y aprovechar el poder de la IA generativa.

Antes de este lanzamiento, si bien era posible utilizar Python en NiFi, la flexibilidad podía ser limitada y la ejecución de scripts de Python podía no ser tan sencilla como les gustaría a los usuarios. Sin embargo, con la última versión, la integración de Python se ha mejorado enormemente, lo que permite una ejecución más fluida del código Python en las canalizaciones NiFi.

Además, la compatibilidad con JDK 21+ ofrece mejoras de rendimiento que hacen que NiFi sea más rápido y eficiente, especialmente cuando se manejan tareas de subprocesos múltiples. Esto puede mejorar significativamente la escalabilidad y la capacidad de respuesta de los flujos de datos NiFi, especialmente cuando se trata de grandes cantidades de datos o tareas de procesamiento complejas.

La introducción de características como grupos de procesos como operaciones sin estado y un motor de reglas para asistencia al desarrollo mejora aún más la funcionalidad y usabilidad de NiFi, brindando a los desarrolladores más flexibilidad y herramientas para construir potentes canales de flujo de datos.

Un procesador de ejemplo: Watson SDK para el modelo básico de IA

Este código Python define un procesador NiFi llamado NiFi que interactúa con el servicio IBM WatsonX AI para generar respuestas basadas en solicitudes de entrada. Tenga en cuenta que para NiFi 2.0.0, Python3.10+ es el requisito mínimo.

Analicemos el código y expliquemos las distintas partes.

importar

import json
import re
from nifiapi.flowfiletransform import FlowFileTransform, FlowFileTransformResult
from nifiapi.properties import PropertyDescriptor, StandardValidators, ExpressionLanguageScope

Las siguientes son las importaciones necesarias para el script:

  • json y re son módulos integrados de Python para procesar datos JSON y expresiones regulares, respectivamente.
  • FlowFileTransform y FlowFileTransformResult son clases del módulo personalizado (nifiapi.flowfiletransform) relacionado con el procesamiento NiFi.
  • PropertyDescriptor, StandardValidators y ExpressionLanguageScope son clases de otro módulo personalizado (nifiapi.properties) que se utilizan para definir las propiedades del procesador.

definición de clase

class CallWatsonXAI(FlowFileTransform):
    ...
  • Esto define una clase llamada CallWatsonXAI, que extiende la clase FlowFileTransform, que maneja la transformación de datos en NiFi.

Detalles del procesador

processor_details = {
    'name': 'Call WatsonX AI',
    'version': '2.0.0-M2',
    'description': 'Calls IBM WatsonX AI service to generate responses based on input prompts.',
    'tags': ['watsonx', 'ai', 'response', 'generation'],
}
  • Defina los detalles del procesador, como la versión, la descripción y las etiquetas. Sin embargo, tenga en cuenta que 2.0.0-M2 es la versión actual.

descriptor de propiedad

PROMPT_TEXT = PropertyDescriptor(
    name="Prompt Text",
    description="Specifies whether or not the text (including full prompt with 
context) to send",
    required=True,
    validators=[StandardValidators.NON_EMPTY_VALIDATOR],
    
expression_language_scope=ExpressionLanguageScope.FLOWFILE_ATTRIBU
TES
)
  • Define las características que se pueden configurar para este procesador. En este caso existen PROMPT_TEXT, WATSONXAI_API_KEY y WATSONXAI_PROJECT_ID.

Constructor

def __init__(self, **kwargs):
    super().__init__()
    self.property_descriptors.append(self.PROMPT_TEXT)
    self.property_descriptors.append(self.WATSONXAI_API_KEY)
    self.property_descriptors.append(self.WATSONXAI_PROJECT_ID)
  • Inicialice la clase de procesador y agregue el descriptor de propiedad a la lista de propiedades.

getPropertyDescriptors más

def get_property_descriptors(self):
    return self.property_descriptors
  • El procesador NiFi requiere este método para obtener una lista de propiedades.

método de transformación

def transform(self, context, flowfile):
    ...
  • Este método es el responsable del procesamiento de los datos. El método recibe un objeto de contexto que contiene información sobre el entorno de ejecución del procesador y un objeto de archivo continuo que contiene los datos a procesar.

Integración de IBM WatsonX

from ibm_watson_machine_learning.foundation_models.utils.enums import 
ModelTypes
from ibm_watson_machine_learning.foundation_models import Model
  • Importe el módulo de aprendizaje automático de IBM Watson.
prompt_text = 
context.getProperty(self.PROMPT_TEXT).evaluateAttributeExpressions(flowfil
e).getValue()
watsonx_api_key = 
context.getProperty(self.WATSONXAI_API_KEY).evaluateAttributeExpressions(
flowfile).getValue()
project_id = 
context.getProperty(self.WATSONXAI_PROJECT_ID).evaluateAttributeExpres
sions(flowfile).getValue()

Obtenga valores de entrada como texto de solicitud, clave API WatsonX e ID del proyecto a través de las propiedades del procesador NiFi.

model_id = ModelTypes.LLAMA_2_70B_CHAT
gen_parms = None
project_id = project_id
space_id = None
verify = False

model = Model(model_id, my_credentials, gen_parms, project_id, space_id, verify)
gen_parms_override = None
generated_response = model.generate(prompt_text, gen_parms_override)
  • Configure y llame al módulo IBM WatsonX para generar una respuesta basada en el texto del mensaje.

Procesamiento de salida

attributes = {"mime.type": "application/json"}
output_contents = json.dumps(generated_response)
  • Defina propiedades de salida para convertir la respuesta generada al formato JSON.

Registro y devoluciones

self.logger.debug(f"Prompt: {prompt_text}")
  • Grabe el texto del mensaje.
return FlowFileTransformResult(relationship="success", 
contents=output_contents, attributes=attributes)

Devuelve el resultado de la conversión, indicando si la conversión fue exitosa y proporcionando datos y propiedades de salida.

Procesador Python preempaquetado

NiFi 2.0.0 viene con un conjunto diverso de procesadores Python que brindan una amplia gama de funcionalidades.

  • Interfaz VectorDB de Pinecone : este procesador facilita la interacción con Pinecone , un servicio de base de datos vectorial, lo que permite a los usuarios consultar y almacenar datos de manera eficiente.
  • ChunkDocument : este procesador divide documentos grandes en fragmentos más pequeños, haciéndolos adecuados para su procesamiento y almacenamiento, especialmente en bases de datos vectoriales donde pueden aplicarse restricciones de tamaño.
  • ParseDocument : este procesador parece ser muy versátil, capaz de analizar varios formatos de documentos como Markdown, PowerPoint, Google Docs y Excel , extrayendo contenido de texto para su posterior procesamiento o almacenamiento.
  • ConvertCSVtoExcel : como sugiere el nombre, este procesador convierte datos del formato CSV al formato Excel, brindando flexibilidad para el intercambio y procesamiento de datos.
  • DetectObjectInImage : este procesador parece utilizar técnicas de aprendizaje profundo para la detección de objetos en imágenes , lo que permite a los usuarios analizar datos de imágenes y extraer información valiosa.
  • PromptChatGPT : este procesador suena interesante: se integra con ChatGPT o modelos de IA conversacionales similares para permitir a los usuarios generar respuestas o participar en conversaciones basadas en indicaciones.
  • PutChroma y QueryChroma : Estos procesadores están relacionados con Chroma , una base de datos de código abierto para grandes modelos de lenguajes (LLM). Facilitan el almacenamiento de datos (PutChroma) y la recuperación/consulta (QueryChroma) en una base de datos Chroma o sistema similar.

en conclusión

Dar prioridad a la integración de Python en Apache NiFi marca un hito importante para cerrar la brecha entre los ingenieros de datos y los científicos de datos , al tiempo que amplía la versatilidad y aplicabilidad de la plataforma.

Al permitir a los entusiastas de Python desarrollar sin problemas componentes NiFi en Python, el ciclo de desarrollo se simplifica, acelerando la implementación de flujos de trabajo y canalizaciones de datos.

Es un momento emocionante para los procesadores Python en NiFi y contribuir al ecosistema puede ser muy valioso. Desarrollar y compartir procesadores Python puede ampliar la funcionalidad de NiFi y resolver casos de uso específicos.

Para comenzar con NiFi, los usuarios pueden consultar la Guía de inicio rápido para el desarrollo y la Guía para desarrolladores de NiFi para obtener información más completa sobre cómo contribuir al proyecto.

Este artículo se publicó por primera vez en Yunyunzhongsheng ( https://yylives.cc/ ), todos son bienvenidos a visitarlo.

Decidí renunciar al código abierto Hongmeng Wang Chenglu, el padre del código abierto Hongmeng: El código abierto Hongmeng es el único evento de software industrial de innovación arquitectónica en el campo del software básico en China: se lanza OGG 1.0, Huawei contribuye con todo el código fuente. Google Reader es asesinado por la "montaña de mierda de código" Ubuntu 24.04 LTS se lanza oficialmente Antes del lanzamiento oficial de Fedora Linux 40, desarrolladores de Microsoft: el rendimiento de Windows 11 es "ridículamente malo", Ma Huateng y Zhou Hongyi se dan la mano, "eliminando rencores" Conocidas empresas de juegos han emitido nuevas regulaciones: los obsequios de boda de los empleados no deben exceder los 100.000 yuanes Pinduoduo fue sentenciado por competencia desleal Indemnización de 5 millones de yuanes
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/6919515/blog/11059170
Recomendado
Clasificación