Erstellen eines Python-Prozessors mit Apache NiFi 2.0.0

Der integrierte Python-Prozessor in der neuesten Version von Apache NiFi vereinfacht Datenverarbeitungsaufgaben, erhöht die Flexibilität und beschleunigt die Entwicklung.

Übersetzt aus Apache NiFi 2.0.0: Building Python Processors , Autor Robert Kimani.

Apache NiFi ist eine leistungsstarke Plattform für das Datenflussmanagement , die viele Funktionen bietet, die die Effizienz und Flexibilität der Datenverarbeitung steigern sollen. Die webbasierte Benutzeroberfläche bietet ein nahtloses Erlebnis für die Gestaltung, Steuerung und Überwachung von Datenflüssen.

NiFi unterstützt die Erstellung benutzerdefinierter Prozessoren und Erweiterungen, sodass Benutzer die Plattform an ihre spezifischen Anforderungen anpassen können.

Mit einer mandantenfähigen Benutzererfahrung stellt NiFi sicher, dass mehrere Benutzer gleichzeitig mit dem System interagieren können, jeder mit seinen eigenen Zugriffsrechten.

Der Python-Handler bietet eine leistungsstarke Möglichkeit, die Funktionalität von NiFi zu erweitern, sodass Benutzer ein umfangreiches Ökosystem von Python- Bibliotheken und -Tools in ihren Datenströmen nutzen können . Hier diskutieren wir die Vorteile der Integration von Python in NiFi-Workflows und erkunden reale Anwendungsfälle, in denen Python-Prozessoren Datenverarbeitungsaufgaben vereinfachen, die Flexibilität erhöhen und die Entwicklung beschleunigen können.

Unabhängig davon, ob Sie Algorithmen für maschinelles Lernen integrieren, benutzerdefinierte Datentransformationen durchführen oder mit externen Systemen interagieren möchten, kann Ihnen der Aufbau eines Python-Prozessors in Apache NiFi dabei helfen, diese Datenintegrationsanforderungen zu erfüllen.

Ein herausragendes Merkmal von NiFi ist seine hohe Konfigurierbarkeit, die es Benutzern ermöglicht, Datenrouting, Transformation und Systemvermittlungslogik an ihre spezifischen Anforderungen anzupassen. NiFi hilft Benutzern dabei, die gewünschten Datenverarbeitungsergebnisse zu erzielen, z. B. indem sie Fehlertoleranz Vorrang vor garantierter Zustellung geben oder auf niedrige Latenz statt auf hohen Durchsatz optimieren.

Die dynamische Priorisierung ermöglicht Echtzeitanpassungen der Priorität von Daten in einem Stream, während die Möglichkeit, Streams zur Laufzeit zu ändern, eine zusätzliche Flexibilität bei der Anpassung an sich ändernde Anforderungen bietet. NiFi verfügt außerdem über einen Gegendruckmechanismus, um die Datenflussraten zu regulieren und Überlastungen zu verhindern, wodurch ein reibungsloser und effizienter Betrieb auch bei wechselnden Arbeitslasten gewährleistet wird.

NiFi unterstützt sowohl die vertikale als auch die horizontale Skalierung. Egal, ob Sie skalieren, um die volle Leistung einer einzelnen Maschine zu nutzen, oder ein Zero-Leader-Cluster-Modell verwenden, NiFi kann sich an Datenverarbeitungsaufgaben jeder Größe anpassen.

Die Datenherkunft ist eine weitere wichtige Funktion, die es Benutzern ermöglicht, die Reise der Daten von ihrem Ursprung bis zu ihrem endgültigen Ziel zu verfolgen. Dies liefert wertvolle Erkenntnisse für die Prüfung, Fehlerbehebung und Sicherstellung der Datenintegrität während des gesamten Prozesses.

Sicherheit steht bei NiFi an erster Stelle, da es unter anderem SSL, SSH, HTTPS und verschlüsselte Inhalte unterstützt. Steckbare, fein abgestimmte rollenbasierte Authentifizierungs- und Autorisierungsmechanismen stellen sicher, dass der Zugriff auf Datenströme sorgfältig kontrolliert wird, sodass mehrere Teams bestimmte Teile des Datenflusses sicher verwalten und teilen können.

Die Designphilosophie von NiFi, inspiriert von Konzepten wie Flow-basierter Programmierung und inszenierter ereignisgesteuerter Architektur , bietet mehrere überzeugende Vorteile:

  • Intuitive visuelle Benutzeroberfläche zum Entwerfen und Verwalten von Datenflüssen zur Verbesserung der Produktivität und Benutzerfreundlichkeit.
  • Asynchrones Verarbeitungsmodell, das hohen Durchsatz und natürliche Pufferung unterstützt, um schwankende Lasten zu bewältigen.
  • Das integrierte Parallelitätsmanagement abstrahiert die Komplexität der Multithread-Programmierung.
  • Schwerpunkt auf Wiederverwendbarkeit und Testbarkeit von Komponenten, Förderung modularer und robuster Entwurfsmethoden.
  • Die native Unterstützung für Gegendruck und Fehlerbehandlung gewährleistet Robustheit und Zuverlässigkeit in Datenverarbeitungspipelines.
  • Erhalten Sie ein umfassendes Verständnis der Datenflussdynamik für eine effektive Überwachung und Fehlerbehebung.

Warum Python-Builds in Apache NiFi verwenden?

Apache NiFi ist ein leistungsstarkes Tool zur Datenaufnahme, -transformation und -weiterleitung. Der Python-Prozessor in NiFi bietet eine flexible Möglichkeit zur Erweiterung seiner Funktionalität, insbesondere für die Verarbeitung unstrukturierter Daten oder die Integration mit externen Systemen wie KI-Modellen oder Vektorspeichern wie der cloudnativen Vektordatenbank Milvus .

Beim Umgang mit unstrukturierten Dateitypen, die Tools wie Cloudera Data Flow extrahieren können, sind Python-Prozessoren für die Implementierung benutzerdefinierter Logik zum Parsen und Bearbeiten der Daten von entscheidender Bedeutung. Sie können Python beispielsweise verwenden, um bestimmte Informationen aus Textdateien zu extrahieren, eine Stimmungsanalyse für Textdaten durchzuführen oder Bilder vor der weiteren Analyse vorzuverarbeiten.

Andererseits können strukturierte Dateitypen häufig mit dem integrierten Prozessor von NiFi verarbeitet werden, ohne dass benutzerdefinierter Python-Code erforderlich ist. NiFi bietet eine breite Palette von Prozessoren für die Verarbeitung strukturierter Datenformate wie CSV, JSON, Avro und für die Interaktion mit Datenbanken , APIs und anderen Unternehmenssystemen.

Wenn Sie mit KI-Modellen oder anderen externen Systemen wie Milvus interagieren müssen, bietet der Python-Prozessor eine praktische Möglichkeit, diese Funktionalität in Ihren NiFi-Datenfluss zu integrieren. Für Aufgaben wie Text-zu-Text-, Text-zu-Bild- oder Text-zu-Sprache-Verarbeitung können Sie Python-Code schreiben, um mit dem relevanten Modell oder Dienst zu interagieren und diese Verarbeitung in Ihre NiFi-Pipeline zu integrieren.

Python: Eine neue Ära in NiFi 2.0.0

Apache NiFi 2.0.0 bringt einige wesentliche Verbesserungen für die Plattform, insbesondere im Hinblick auf die Python-Integration und Leistungsverbesserungen. Die Möglichkeit, Python-Skripte nahtlos in NiFi-Datenflüsse zu integrieren, eröffnet vielfältige Möglichkeiten für die Arbeit mit einer Vielzahl von Datenquellen und die Nutzung der Leistungsfähigkeit generativer KI.

Vor dieser Version war es zwar möglich, Python in NiFi zu verwenden, die Flexibilität war jedoch möglicherweise eingeschränkt und die Ausführung von Python-Skripten war möglicherweise nicht so rationalisiert, wie Benutzer es sich wünschen. Mit der neuesten Version wurde die Python-Integration jedoch erheblich verbessert, was eine nahtlosere Ausführung von Python-Code in NiFi-Pipelines ermöglicht.

Darüber hinaus bringt die Unterstützung für JDK 21+ Leistungsverbesserungen mit sich, die NiFi schneller und effizienter machen, insbesondere bei der Bearbeitung von Multithread-Aufgaben. Dies kann die Skalierbarkeit und Reaktionsfähigkeit von NiFi-Datenströmen erheblich verbessern, insbesondere bei der Verarbeitung großer Datenmengen oder komplexer Verarbeitungsaufgaben.

Die Einführung von Funktionen wie Prozessgruppen als zustandslose Operationen und einer Regel-Engine zur Entwicklungsunterstützung verbessert die Funktionalität und Benutzerfreundlichkeit von NiFi weiter und bietet Entwicklern mehr Flexibilität und Tools zum Aufbau leistungsstarker Datenfluss-Pipelines.

Ein Beispielprozessor: Watson SDK zum grundlegenden KI-Modell

Dieser Python-Code definiert einen NiFi-Prozessor namens NiFi, der mit dem IBM WatsonX AI-Dienst interagiert, um Antworten basierend auf Eingabeaufforderungen zu generieren. Bitte beachten Sie, dass für NiFi 2.0.0 Python3.10+ die Mindestanforderung ist.

Lassen Sie uns den Code aufschlüsseln und die verschiedenen Teile erklären.

importieren

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

Im Folgenden sind die erforderlichen Importe für das Skript aufgeführt:

  • json und re sind Pythons integrierte Module zur Verarbeitung von JSON-Daten bzw. regulären Ausdrücken.
  • FlowFileTransform und FlowFileTransformResult sind Klassen des benutzerdefinierten Moduls (nifiapi.flowfiletransform), das sich auf die NiFi-Verarbeitung bezieht.
  • PropertyDescriptor, StandardValidators und ExpressionLanguageScope sind Klassen aus einem anderen benutzerdefinierten Modul (nifiapi.properties), das zum Definieren von Prozessoreigenschaften verwendet wird.

Klassendefinition

class CallWatsonXAI(FlowFileTransform):
    ...
  • Dies definiert eine Klasse namens CallWatsonXAI, die die FlowFileTransform-Klasse erweitert, die die Datentransformation in NiFi übernimmt.

Angaben zum Prozessor

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'],
}
  • Definieren Sie Prozessordetails wie Version, Beschreibung und Tags. Bitte beachten Sie jedoch, dass 2.0.0-M2 die aktuelle Version ist.

Eigenschaftsbeschreibung

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
)
  • Definiert die Funktionen, die für diesen Prozessor eingestellt werden können. In diesem Fall gibt es PROMPT_TEXT, WATSONXAI_API_KEY und WATSONXAI_PROJECT_ID.

Konstrukteur

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)
  • Initialisieren Sie die Prozessorklasse und hängen Sie den Eigenschaftendeskriptor an die Eigenschaftenliste an.

getPropertyDescriptors wird verwendet

def get_property_descriptors(self):
    return self.property_descriptors
  • Diese Methode wird vom NiFi-Prozessor benötigt, um eine Liste von Eigenschaften zu erhalten.

Transformationsmethode

def transform(self, context, flowfile):
    ...
  • Diese Methode ist für die Verarbeitung der Daten verantwortlich. Die Methode empfängt ein Kontextobjekt, das Informationen über die Ausführungsumgebung des Prozessors enthält, und ein Streamdateiobjekt, das die zu verarbeitenden Daten enthält.

IBM WatsonX-Integration

from ibm_watson_machine_learning.foundation_models.utils.enums import 
ModelTypes
from ibm_watson_machine_learning.foundation_models import Model
  • Importieren Sie das IBM Watson-Modul für maschinelles Lernen.
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()

Erhalten Sie Eingabewerte wie Eingabeaufforderungstext, WatsonX-API-Schlüssel und Projekt-ID über die Eigenschaften des NiFi-Prozessors.

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)
  • Konfigurieren Sie das IBM WatsonX-Modul und rufen Sie es auf, um eine Antwort basierend auf dem Eingabeaufforderungstext zu generieren.

Ausgabeverarbeitung

attributes = {"mime.type": "application/json"}
output_contents = json.dumps(generated_response)
  • Definieren Sie Ausgabeeigenschaften, um die generierte Antwort in das JSON-Format zu konvertieren.

Protokollierung und Rückgabe

self.logger.debug(f"Prompt: {prompt_text}")
  • Notieren Sie den Aufforderungstext.
return FlowFileTransformResult(relationship="success", 
contents=output_contents, attributes=attributes)

Gibt das Konvertierungsergebnis zurück, gibt an, ob die Konvertierung erfolgreich war, und stellt Ausgabedaten und Eigenschaften bereit.

Vorgefertigter Python-Prozessor

NiFi 2.0.0 wird mit einem vielfältigen Satz von Python-Prozessoren geliefert, die eine breite Palette an Funktionen bieten.

  • Pinecones VectorDB-Schnittstelle : Dieser Prozessor erleichtert die Interaktion mit Pinecone , einem Vektordatenbankdienst, der es Benutzern ermöglicht, Daten effizient abzufragen und zu speichern.
  • ChunkDocument : Dieser Prozessor zerlegt große Dokumente in kleinere Blöcke und eignet sich so für die Verarbeitung und Speicherung, insbesondere in Vektordatenbanken, in denen möglicherweise Größenbeschränkungen gelten.
  • ParseDocument : Dieser Prozessor scheint sehr vielseitig zu sein und kann verschiedene Dokumentformate wie Markdown, PowerPoint, Google Docs und Excel analysieren und Textinhalte zur weiteren Verarbeitung oder Speicherung extrahieren.
  • ConvertCSVtoExcel : Wie der Name schon sagt, konvertiert dieser Prozessor Daten vom CSV-Format in das Excel-Format und bietet so Flexibilität für den Datenaustausch und die Datenverarbeitung.
  • DetectObjectInImage : Dieser Prozessor scheint Deep-Learning-Techniken zur Objekterkennung in Bildern zu nutzen , sodass Benutzer Bilddaten analysieren und wertvolle Erkenntnisse gewinnen können.
  • PromptChatGPT : Dieser Prozessor klingt interessant – er lässt sich in ChatGPT oder ähnliche Konversations-KI-Modelle integrieren, um Benutzern die Generierung von Antworten oder die Teilnahme an Konversationen basierend auf Eingabeaufforderungen zu ermöglichen.
  • PutChroma und QueryChroma : Diese Prozessoren sind mit Chroma verwandt , einer Open-Source-Datenbank für große Sprachmodelle (LLMs). Sie erleichtern die Datenspeicherung (PutChroma) und das Abrufen/Abfragen (QueryChroma) in einer Chroma-Datenbank oder einem ähnlichen System.

abschließend

Die Priorisierung der Python-Integration in Apache NiFi stellt einen wichtigen Meilenstein dar, um die Kluft zwischen Dateningenieuren und Datenwissenschaftlern zu schließen und gleichzeitig die Vielseitigkeit und Anwendbarkeit der Plattform zu erweitern.

Dadurch, dass Python-Enthusiasten NiFi-Komponenten nahtlos in Python entwickeln können, wird der Entwicklungszyklus vereinfacht und die Implementierung von Datenpipelines und Workflows beschleunigt.

Es ist eine aufregende Zeit für Python-Prozessoren in NiFi und ein Beitrag zum Ökosystem kann sehr wertvoll sein. Durch die Entwicklung und gemeinsame Nutzung von Python-Prozessoren kann die Funktionalität von NiFi erweitert und spezifische Anwendungsfälle gelöst werden.

Um mit NiFi zu beginnen, können Benutzer die Kurzanleitung für die Entwicklung und die NiFi-Entwickleranleitung lesen , um umfassendere Informationen darüber zu erhalten, wie sie zum Projekt beitragen können.

Dieser Artikel wurde zuerst auf Yunyunzhongsheng ( https://yylives.cc/ ) veröffentlicht, jeder ist herzlich willkommen.

Ich habe beschlossen, Open-Source-Hongmeng aufzugeben . Wang Chenglu, der Vater von Open-Source-Hongmeng: Open-Source-Hongmeng ist die einzige Architekturinnovations- Industriesoftwareveranstaltung im Bereich Basissoftware in China – OGG 1.0 wird veröffentlicht, Huawei steuert den gesamten Quellcode bei Google Reader wird vom „Code-Scheißberg“ getötet Ubuntu 24.04 LTS wird offiziell veröffentlicht Vor der offiziellen Veröffentlichung von Fedora Linux 40 Microsoft-Entwickler: Die Leistung von Windows 11 ist „lächerlich schlecht“, Ma Huateng und Zhou Hongyi geben sich die Hand, „beseitigen den Groll“ Namhafte Spielefirmen haben neue Vorschriften erlassen: Hochzeitsgeschenke an Mitarbeiter dürfen 100.000 Yuan nicht überschreiten. Pinduoduo wurde wegen unlauteren Wettbewerbs zu einer Entschädigung von 5 Millionen Yuan verurteilt
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/6919515/blog/11059170
Empfohlen
Rangfolge