最新バージョンの Apache NiFi に組み込まれた Python プロセッサは、データ処理タスクを簡素化し、柔軟性を高め、開発を高速化します。
著者 Robert Kimani の「Apache NiFi 2.0.0: Building Python Processors」から翻訳。
Apache NiFi は、データ フロー管理専用の強力なプラットフォームであり、データ処理の効率と柔軟性を高めるために設計された多くの機能を提供します。 Web ベースのユーザー インターフェイスは、データ フローの設計、制御、監視のためのシームレスなエクスペリエンスを提供します。
NiFi はカスタム プロセッサと拡張機能の構築をサポートしているため、ユーザーはプラットフォームを特定のニーズに合わせて調整できます。
マルチテナントのユーザー エクスペリエンスにより、NiFi は複数のユーザーがそれぞれ独自のアクセス権セットを持ってシステムを同時に操作できるようにします。
Python ハンドラーは、 NiFi の機能を拡張する強力な方法を提供し、ユーザーがデータ ストリームでPython ライブラリとツールの豊富なエコシステムを活用できるようにします。ここでは、NiFi ワークフローに Python を組み込む利点について説明し、Python プロセッサがデータ処理タスクを簡素化し、柔軟性を高め、開発をスピードアップできる実際の使用例を探ります。
機械学習アルゴリズムを統合する場合でも、カスタム データ変換を実行する場合でも、外部システムと対話する場合でも、Apache NiFi で Python プロセッサを構築すると、これらのデータ統合のニーズを満たすことができます。
NiFi の際立った機能は、高度に構成可能な性質であり、ユーザーはデータ ルーティング、変換、システム仲介ロジックを特定の要件に合わせて調整できます。 NiFi は、保証された配信よりもフォールト トレランスを優先したり、高スループットよりも低遅延を最適化したりするなど、ユーザーが望むデータ処理結果を達成するのに役立ちます。
動的な優先順位付けにより、ストリーム内のデータの優先順位をリアルタイムで調整できるほか、実行時にストリームを変更できる機能により、変化するニーズに適応する柔軟性の層が追加されます。 NiFi には、データ フロー レートを調整して過負荷を防止するバックプレッシャー メカニズムも組み込まれており、さまざまなワークロード下でもスムーズで効率的な動作を保証します。
NiFi は、垂直方向と水平方向のスケーリングの両方をサポートするように設計されています。単一マシンの能力を最大限に活用するように拡張する場合でも、ゼロリーダー クラスター モデルを使用する場合でも、NiFi はあらゆる規模のデータ処理タスクに適応できます。
データの出所は、ユーザーがデータの発信元から最終目的地までの移動を追跡できるようにするもう 1 つの重要な機能です。これにより、監査、トラブルシューティング、プロセス全体にわたるデータの整合性の確保に貴重な洞察が得られます。
NiFi ではセキュリティが最も重要であり、SSL、SSH、HTTPS、暗号化されたコンテンツなどのセキュリティ対策がサポートされています。プラグイン可能なきめ細かいロールベースの認証および認可メカニズムにより、データ フローへのアクセスが慎重に制御され、複数のチームがフローの特定の部分を安全に管理および共有できるようになります。
NiFi の設計哲学は、フローベースのプログラミングやステージングされたイベント駆動型アーキテクチャなどの概念からインスピレーションを得ており、いくつかの魅力的な利点を提供します。
- データ フローを設計および管理するための直観的なビジュアル インターフェイスにより、生産性と使いやすさが向上します。
- 高スループットと変動する負荷に対応する自然なバッファリングをサポートする非同期処理モデル。
- 組み込みの同時実行管理により、マルチスレッド プログラミングの複雑さが抽象化されます。
- コンポーネントの再利用性とテスト容易性を重視し、モジュール式で堅牢な設計手法を推進します。
- バックプレッシャーとエラー処理のネイティブ サポートにより、データ処理パイプラインの堅牢性と信頼性が保証されます。
- 効果的なモニタリングとトラブルシューティングのために、データ フローのダイナミクスを包括的に理解します。
Apache NiFi で Python ビルドを使用する理由は何ですか?
Apache NiFiは、データの取り込み、変換、ルーティングのための強力なツールです。 NiFi の Python プロセッサは、特に非構造化データの処理や、AI モデルやクラウドネイティブ ベクトル データベースMilvusなどのベクトル ストアなどの外部システムとの統合において、その機能を拡張する柔軟な方法を提供します。
Cloudera Data Flowなどのツールで抽出できる非構造化ファイル タイプを扱う場合、データを解析して操作するためのカスタム ロジックを実装するために Python プロセッサが重要です。たとえば、Python を使用して、テキスト ファイルから特定の情報を抽出したり、テキスト データに対して感情分析を実行したり、さらに分析する前に画像を前処理したりできます。
一方、構造化されたファイル タイプは、多くの場合、カスタム Python コードを必要とせずに、NiFi の組み込みプロセッサを使用して処理できます。 NiFi は、CSV、JSON、Avro などの構造化データ形式を処理し、データベース、API 、およびその他のエンタープライズ システムと対話するための幅広いプロセッサを提供します。
AI モデルや Milvus などの他の外部システムと対話する必要がある場合、Python プロセッサは、この機能を NiFi データ フローに統合する便利な方法を提供します。テキストからテキストへの変換、テキストから画像への変換、テキストから音声への変換などのタスクの場合、Python コードを記述して関連するモデルまたはサービスと対話し、この処理を NiFi パイプラインに組み込むことができます。
Python: NiFi 2.0.0 の新時代
Apache NiFi 2.0.0 は、特に Python の統合とパフォーマンスの強化の点で、プラットフォームにいくつかの大幅な改善をもたらします。 Python スクリプトを NiFi データ フローにシームレスに統合できる機能により、さまざまなデータ ソースを操作し、生成 AI の力を活用する幅広い可能性が開かれます。
このリリースより前は、NiFi で Python を使用することは可能でしたが、柔軟性が制限され、Python スクリプトの実行がユーザーが望むほど合理化されない可能性がありました。ただし、最新バージョンでは Python の統合が大幅に改善され、NiFi パイプラインでの Python コードのよりシームレスな実行が可能になりました。
さらに、JDK 21+ のサポートにより、特にマルチスレッド タスクを処理する場合に、NiFi のパフォーマンスが向上し、より高速かつ効率的になりました。これにより、特に大量のデータや複雑な処理タスクを扱う場合、NiFi データ ストリームのスケーラビリティと応答性が大幅に向上します。
ステートレス操作としてのプロセス グループや開発支援のためのルール エンジンなどの機能の導入により、NiFi の機能と使いやすさがさらに強化され、開発者は強力なデータ フロー パイプラインを構築するための柔軟性とツールが提供されます。
プロセッサーの例: Watson SDK から基本的な AI モデルへ
この Python コードは、IBM WatsonX AI サービスと対話して入力プロンプトに基づいて応答を生成する、NiFi と呼ばれる NiFi プロセッサーを定義します。 NiFi 2.0.0 の場合、Python3.10+ が最小要件であることに注意してください。
コードを分解して、さまざまな部分を説明しましょう。
輸入
import json
import re
from nifiapi.flowfiletransform import FlowFileTransform, FlowFileTransformResult
from nifiapi.properties import PropertyDescriptor, StandardValidators, ExpressionLanguageScope
スクリプトに必要なインポートは次のとおりです。
- json と re は、それぞれ JSON データと正規表現を処理するための Python の組み込みモジュールです。
- FlowFileTransformおよびFlowFileTransformResultは、NiFi処理に関連するカスタムモジュール(nifiapi.flowfiletransform)のクラスです。
- PropertyDescriptor、StandardValidators、および ExpressionLanguageScope は、プロセッサ プロパティを定義するために使用される別のカスタム モジュール (nifiapi.properties) のクラスです。
クラス定義
class CallWatsonXAI(FlowFileTransform):
...
- これは、NiFi でデータ変換を処理する FlowFileTransform クラスを拡張する CallWatsonXAI というクラスを定義します。
プロセッサの詳細
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'],
}
- バージョン、説明、タグなどのプロセッサの詳細を定義します。ただし、2.0.0-M2 が現在のバージョンであることに注意してください。
プロパティ記述子
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
)
- このプロセッサに設定できる機能を定義します。この場合、PROMPT_TEXT、WATSONXAI_API_KEY、および WATSONXAI_PROJECT_ID があります。
コンストラクタ
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)
- プロセッサ クラスを初期化し、プロパティ記述子をプロパティ リストに追加します。
getPropertyDescriptors メソッド
def get_property_descriptors(self):
return self.property_descriptors
- このメソッドは、NiFi プロセッサがプロパティのリストを取得するために必要です。
変換メソッド
def transform(self, context, flowfile):
...
- このメソッドはデータの処理を担当します。このメソッドは、プロセッサの実行環境に関する情報を含むコンテキスト オブジェクトと、処理されるデータを含むストリーム ファイル オブジェクトを受け取ります。
IBM WatsonXの統合
from ibm_watson_machine_learning.foundation_models.utils.enums import
ModelTypes
from ibm_watson_machine_learning.foundation_models import Model
- 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()
NiFi プロセッサーのプロパティを通じて、プロンプト テキスト、WatsonX API キー、プロジェクト ID などの入力値を取得します。
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)
- IBM WatsonX モジュールを構成して呼び出し、プロンプト・テキストに基づいて応答を生成します。
出力処理
attributes = {"mime.type": "application/json"}
output_contents = json.dumps(generated_response)
- 生成された応答を JSON 形式に変換するための出力プロパティを定義します。
ロギングとリターン
self.logger.debug(f"Prompt: {prompt_text}")
- プロンプトのテキストを記録します。
return FlowFileTransformResult(relationship="success",
contents=output_contents, attributes=attributes)
変換が成功したかどうかを示し、出力データとプロパティを提供する変換結果を返します。
パッケージ化されたPythonプロセッサ
NiFi 2.0.0 には、幅広い機能を提供するさまざまな Python プロセッサのセットが付属しています。
- Pinecone の VectorDB インターフェイス: このプロセッサは、ベクトル データベース サービスであるPineconeとの対話を容易にし、ユーザーがデータを効率的にクエリおよび保存できるようにします。
- ChunkDocument : このプロセッサは、大きなドキュメントを小さなチャンクに分割し、特にサイズ制限が適用される可能性のあるベクトル データベースでの処理と保存に適したものにします。
- ParseDocument : このプロセッサは非常に多用途であるようで、Markdown、PowerPoint、Google Docs、Excelなどのさまざまなドキュメント形式を解析し、さらなる処理や保存のためにテキスト コンテンツを抽出できます。
- ConvertCSVtoExcel : 名前が示すように、このプロセッサはデータを CSV 形式から Excel 形式に変換し、データ交換と処理に柔軟性を提供します。
- DetectObjectInImage : このプロセッサは、画像内のオブジェクト検出に深層学習技術を利用しているようで、ユーザーが画像データを分析して貴重な洞察を抽出できるようにします。
- PromptChatGPT : このプロセッサは面白そうです。ChatGPT または同様の会話型 AI モデルと統合して、ユーザーがプロンプトに基づいて応答を生成したり、会話に参加したりできるようにします。
- PutChroma および QueryChroma : これらのプロセッサは、大規模言語モデル (LLM) 用のオープン ソース データベースであるChromaに関連しています。これらは、Chroma データベースまたは同様のシステムでのデータ ストレージ (PutChroma) および取得/クエリ (QueryChroma) を容易にします。
結論は
Apache NiFi での Python の統合を優先することは、プラットフォームの多用途性と適用性を拡大しながら、データ エンジニアとデータ サイエンティストの間のギャップを埋める上で重要なマイルストーンとなります。
Python 愛好家が Python で NiFi コンポーネントをシームレスに開発できるようにすることで、開発サイクルが簡素化され、データ パイプラインとワークフローの実装が加速されます。
NiFi の Python プロセッサにとっては刺激的な時期であり、エコシステムに貢献することは非常に価値のあることです。 Python プロセッサを開発して共有すると、NiFi の機能を拡張し、特定のユースケースを解決できます。
NiFi の使用を開始するには、ユーザーは開発用のクイック スタート ガイドと、プロジェクトに貢献する方法に関するより包括的な情報についてのNiFi 開発者ガイドを参照できます。
私はオープンソース紅蒙を諦めることにしました 、オープンソース紅蒙の父である王成露氏:オープンソース紅蒙は 中国の基本ソフトウェア分野における唯一の建築革新産業ソフトウェアイベントです - OGG 1.0がリリースされ、ファーウェイがすべてのソースコードを提供します。 Google Readerが「コードクソ山」に殺される Ubuntu 24.04 LTSが正式リリース Fedora Linux 40の正式リリースを前に、 Microsoft開発者ら:Windows 11のパフォーマンスは「ばかばかしいほど悪い」、 馬化騰氏と周宏毅氏が握手し「恨みを晴らす」 有名ゲーム会社が新たな規定を発行:従業員の結婚祝いは10万元を超えてはならない 拼多多は不正競争で有罪判決 賠償金500万元この記事はYunyunzhongsheng ( https://yylives.cc/ ) で最初に公開されたもので、どなたでもご覧いただけます。