Apache NiFi 2.0.0을 사용하여 Python 프로세서 구축

최신 버전의 Apache NiFi에 내장된 Python 프로세서는 데이터 처리 작업을 단순화하고 유연성을 높이며 개발 속도를 높입니다.

Apache NiFi 2.0.0: Python 프로세서 구축 (저자 Robert Kimani) 에서 번역됨 .

Apache NiFi는 데이터 흐름 관리 전용의 강력한 플랫폼으로 , 데이터 처리의 효율성과 유연성을 높이도록 설계된 많은 기능을 제공합니다. 웹 기반 사용자 인터페이스는 데이터 흐름을 설계, 제어 및 모니터링하기 위한 원활한 환경을 제공합니다.

NiFi는 맞춤형 프로세서 및 확장 구축을 지원하므로 사용자는 특정 요구 사항에 맞게 플랫폼을 조정할 수 있습니다.

다중 테넌트 사용자 경험을 통해 NiFi는 여러 사용자가 각각 고유한 액세스 권한 세트를 사용하여 시스템과 동시에 상호 작용할 수 있도록 보장합니다.

Python 핸들러는 NiFi의 기능을 확장하는 강력한 방법을 제공하므로 사용자는 데이터 스트림에서 풍부한 Python 라이브러리 및 도구 생태계 를 활용할 수 있습니다. 여기에서는 Python을 NiFi 워크플로에 통합함으로써 얻을 수 있는 이점에 대해 논의하고 Python 프로세서가 데이터 처리 작업을 단순화하고 유연성을 높이며 개발 속도를 높일 수 있는 실제 사용 사례를 살펴봅니다.

기계 학습 알고리즘을 통합하든, 사용자 정의 데이터 변환을 수행하든, 외부 시스템과 상호 작용하든 Apache NiFi에서 Python 프로세서를 구축하면 이러한 데이터 통합 ​​요구 사항을 충족하는 데 도움이 될 수 있습니다.

NiFi의 뛰어난 기능은 사용자가 데이터 라우팅, 변환 및 시스템 중재 논리를 특정 요구 사항에 맞게 조정할 수 있도록 고도로 구성 가능하다는 것입니다. NiFi는 보장된 전달보다 내결함성을 우선시하거나 높은 처리량보다 짧은 대기 시간을 최적화하는 등 사용자가 원하는 데이터 처리 결과를 달성하도록 돕습니다.

동적 우선순위 지정을 통해 스트림의 데이터 우선순위를 실시간으로 조정할 수 있으며, 런타임에 스트림을 수정하는 기능은 변화하는 요구 사항에 적응할 수 있는 유연성을 추가합니다. NiFi는 또한 데이터 흐름 속도를 조절하고 과부하를 방지하는 배압 메커니즘을 통합하여 다양한 작업 부하에서도 원활하고 효율적인 작동을 보장합니다.

NiFi는 수직 및 수평 스케일링을 모두 지원하도록 설계되었습니다. 단일 머신의 전체 성능을 활용하도록 확장하든, 제로 리더 클러스터 모델을 사용하든 NiFi는 모든 규모의 데이터 처리 작업에 적응할 수 있습니다.

데이터 출처는 사용자가 원본에서 최종 목적지까지의 데이터 이동을 추적할 수 있는 또 다른 핵심 기능입니다. 이는 프로세스 전반에 걸쳐 감사, 문제 해결 및 데이터 무결성 보장에 대한 귀중한 통찰력을 제공합니다.

SSL, SSH, HTTPS 및 암호화된 콘텐츠를 지원하는 NiFi에서는 보안이 가장 중요합니다. 플러그형의 세분화된 역할 기반 인증 및 권한 부여 메커니즘을 통해 데이터 흐름에 대한 액세스가 신중하게 제어되므로 여러 팀이 흐름의 특정 부분을 안전하게 관리하고 공유할 수 있습니다.

흐름 기반 프로그래밍단계적 이벤트 중심 아키텍처 와 같은 개념에서 영감을 받은 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의 기능과 유용성이 더욱 향상되어 개발자에게 강력한 데이터 흐름 파이프라인을 구축할 수 있는 더 많은 유연성과 도구가 제공됩니다.

예제 프로세서: 기본 AI 모델에 대한 Watson SDK

이 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 개발자 가이드를 참조하세요.

이 기사는 Yunyunzhongsheng ( https://yylives.cc/ ) 에 처음 게재되었습니다 . 누구나 방문하실 수 있습니다.

오픈 소스 Hongmeng을 포기하기로 결정했습니다 . 오픈 소스 Hongmeng의 아버지 Wang Chenglu: 오픈 소스 Hongmeng은 중국에서 유일하게 기초 소프트웨어 분야의 건축 혁신 산업 소프트웨어 행사입니다. OGG 1.0이 출시되고 Huawei는 모든 소스 코드를 제공합니다. Google 리더가 "코드 똥 산"에 의해 사망했습니다 Ubuntu 24.04 LTS 공식 출시 Fedora Linux 40 공식 출시 전에 Microsoft 개발자 : Windows 11 성능이 "어리석을 정도로 나쁩니다", Ma Huateng과 Zhou Hongyi가 악수하며 "원한을 제거합니다" 유명 게임 회사가 새로운 규정을 발표했습니다. 직원의 결혼 선물은 10만 위안을 초과할 수 없습니다. 핀둬둬는 부정 경쟁 혐의로 판결을 받았습니다. 보상금은 500만 위안입니다.
{{o.이름}}
{{이름}}

추천

출처my.oschina.net/u/6919515/blog/11059170