Создание процессора Python с использованием Apache NiFi 2.0.0

Встроенный процессор Python в последней версии Apache NiFi упрощает задачи обработки данных, повышает гибкость и ускоряет разработку.

Перевод с Apache NiFi 2.0.0: Создание процессоров Python , автор Роберт Кимани.

Apache NiFi — это мощная платформа, предназначенная для управления потоками данных , которая предоставляет множество функций, предназначенных для повышения эффективности и гибкости обработки данных. Его веб-интерфейс пользователя обеспечивает удобство проектирования, управления и мониторинга потоков данных.

NiFi поддерживает создание собственных процессоров и расширений, что позволяет пользователям адаптировать платформу к своим конкретным потребностям.

Благодаря многопользовательскому пользовательскому интерфейсу NiFi гарантирует, что несколько пользователей могут одновременно взаимодействовать с системой, каждый со своим собственным набором прав доступа.

Обработчик Python предоставляет мощный способ расширения функциональности NiFi, позволяя пользователям использовать богатую экосистему библиотек и инструментов Python в своих потоках данных. Здесь мы обсуждаем преимущества включения Python в рабочие процессы NiFi и исследуем реальные варианты использования, когда процессоры Python могут упростить задачи обработки данных, повысить гибкость и ускорить разработку.

Если вы хотите интегрировать алгоритмы машинного обучения, выполнять собственные преобразования данных или взаимодействовать с внешними системами, создание процессора Python в Apache NiFi может помочь вам удовлетворить эти потребности в интеграции данных.

Отличительной особенностью NiFi является его широкие возможности настройки, позволяющие пользователям адаптировать логику маршрутизации, преобразования и посредничества данных к своим конкретным требованиям. NiFi помогает пользователям достигать желаемых результатов обработки данных, например, отдавать приоритет отказоустойчивости над гарантированной доставкой или оптимизировать низкую задержку по сравнению с высокой пропускной способностью.

Динамическая приоритизация позволяет в режиме реального времени корректировать приоритет данных в потоке, а возможность изменять потоки во время выполнения добавляет уровень гибкости для адаптации к меняющимся потребностям. NiFi также включает в себя механизм противодавления для регулирования скорости потока данных и предотвращения перегрузки, обеспечивая плавную и эффективную работу даже при различных рабочих нагрузках.

NiFi предназначен для поддержки как вертикального, так и горизонтального масштабирования. Будь то масштабирование для использования всей мощности одной машины или использование модели кластера с нулевым лидером, NiFi может адаптироваться к задачам обработки данных любого размера.

Происхождение данных — еще одна ключевая функция, которая позволяет пользователям отслеживать путь данных от источника до конечного пункта назначения. Это дает ценную информацию для аудита, устранения неполадок и обеспечения целостности данных на протяжении всего процесса.

Безопасность имеет первостепенное значение в NiFi, который, помимо других мер безопасности, поддерживает SSL, SSH, HTTPS и зашифрованный контент. Подключаемые, детализированные механизмы аутентификации и авторизации на основе ролей обеспечивают тщательный контроль доступа к потокам данных, позволяя нескольким командам безопасно управлять определенными частями потока и совместно использовать их.

Философия дизайна NiFi, вдохновленная такими концепциями, как потоковое программирование и поэтапная управляемая событиями архитектура , предлагает несколько убедительных преимуществ:

  • Интуитивно понятный визуальный интерфейс для проектирования и управления потоками данных, повышения производительности и простоты использования.
  • Модель асинхронной обработки, которая поддерживает высокую пропускную способность и естественную буферизацию для адаптации к меняющимся нагрузкам.
  • Встроенное управление параллелизмом абстрагирует сложность многопоточного программирования.
  • Акцент на возможности повторного использования и тестирования компонентов, продвижение модульных и надежных методов проектирования.
  • Встроенная поддержка противодействия и обработки ошибок обеспечивает надежность и надежность конвейеров обработки данных.
  • Получите полное представление о динамике потока данных для эффективного мониторинга и устранения неполадок.

Зачем использовать сборки Python в Apache NiFi?

Apache NiFi — мощный инструмент для приема, преобразования и маршрутизации данных. Процессор Python в NiFi обеспечивает гибкий способ расширения его функциональности, особенно для обработки неструктурированных данных или интеграции с внешними системами, такими как модели искусственного интеллекта или векторные хранилища, такие как облачная векторная база данных Milvus .

При работе с неструктурированными типами файлов, которые могут извлекать такие инструменты, как Cloudera Data Flow , процессоры Python имеют решающее значение для реализации пользовательской логики для анализа и манипулирования данными. Например, вы можете использовать Python для извлечения определенной информации из текстовых файлов, выполнения анализа тональности текстовых данных или предварительной обработки изображений перед дальнейшим анализом.

С другой стороны, структурированные типы файлов часто можно обрабатывать с помощью встроенного процессора NiFi без необходимости использования специального кода Python. NiFi предоставляет широкий спектр процессоров для обработки форматов структурированных данных, таких как CSV, JSON, Avro, а также для взаимодействия с базами данных , API и другими корпоративными системами.

Когда вам необходимо взаимодействовать с моделями искусственного интеллекта или другими внешними системами, такими как Milvus, процессор Python предоставляет удобный способ интеграции этой функции в поток данных NiFi. Для таких задач, как обработка текста в текст, текста в изображение или преобразования текста в речь, вы можете написать код Python для взаимодействия с соответствующей моделью или сервисом и включить эту обработку в свой конвейер NiFi.

Python: новая эра в NiFi 2.0.0

Apache NiFi 2.0.0 вносит в платформу некоторые существенные улучшения, особенно с точки зрения интеграции Python и повышения производительности. Возможность плавной интеграции скриптов Python в потоки данных NiFi открывает широкий спектр возможностей для работы с различными источниками данных и использования возможностей генеративного искусственного интеллекта.

До этого выпуска, хотя в NiFi можно было использовать Python, гибкость могла быть ограничена, а выполнение сценариев Python могло быть не таким оптимизированным, как хотелось бы пользователям. Однако в последней версии интеграция Python была значительно улучшена, что позволяет более плавно выполнять код Python в конвейерах NiFi.

Кроме того, поддержка JDK 21+ обеспечивает повышение производительности, что делает NiFi более быстрым и эффективным, особенно при выполнении многопоточных задач. Это может значительно улучшить масштабируемость и оперативность потоков данных NiFi, особенно при работе с большими объемами данных или сложными задачами обработки.

Внедрение таких функций, как группы процессов, операции без сохранения состояния и механизм правил для помощи в разработке, еще больше расширяет функциональность и удобство использования NiFi, предоставляя разработчикам больше гибкости и инструментов для создания мощных конвейеров потоков данных.

Пример процессора: Watson SDK для базовой модели искусственного интеллекта.

Этот код Python определяет процессор NiFi под названием NiFi, который взаимодействует со службой искусственного интеллекта IBM WatsonX для генерации ответов на основе входных запросов. Обратите внимание, что для 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 — это встроенные модули Python для обработки данных JSON и регулярных выражений соответственно.
  • FlowFileTransform и FlowFileTransformResult — это классы пользовательского модуля (nifiapi.flowfiletransform), относящиеся к обработке NiFi.
  • PropertyDescriptor, StandardValidators и ExpressionLanguageScope — это классы из другого пользовательского модуля (nifiapi.properties), используемые для определения свойств процессора.

определение класса

class CallWatsonXAI(FlowFileTransform):
    ...
  • Здесь определяется класс CallWatsonXAI, который расширяет класс FlowFileTransform, который обрабатывает преобразование данных в NiFi.

Подробности процессора

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()

Получите входные значения, такие как текст подсказки, ключ WatsonX API и идентификатор проекта, через свойства процессора 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)
  • Настройте и вызовите модуль 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, которые обеспечивают широкий спектр функций.

  • Интерфейс VectorDB Pinecone : этот процессор облегчает взаимодействие с Pinecone , службой векторной базы данных, позволяя пользователям эффективно запрашивать и хранить данные.
  • ChunkDocument : этот процессор разбивает большие документы на более мелкие фрагменты, что делает их пригодными для обработки и хранения, особенно в векторных базах данных, где могут применяться ограничения по размеру.
  • ParseDocument : Этот процессор кажется очень универсальным, способным анализировать различные форматы документов, такие как Markdown, PowerPoint, Google Docs и Excel , извлекая текстовое содержимое для дальнейшей обработки или хранения.
  • ConvertCSVtoExcel : Как следует из названия, этот процессор преобразует данные из формата CSV в формат Excel, обеспечивая гибкость обмена и обработки данных.
  • DetectObjectInImage : этот процессор, похоже, использует методы глубокого обучения для обнаружения объектов на изображениях , что позволяет пользователям анализировать данные изображения и извлекать ценную информацию.
  • PromptChatGPT : этот процессор звучит интересно — он интегрируется с ChatGPT или аналогичными моделями диалогового искусственного интеллекта, позволяя пользователям генерировать ответы или участвовать в разговорах на основе подсказок.
  • PutChroma и QueryChroma : эти процессоры связаны с Chroma , базой данных с открытым исходным кодом для больших языковых моделей (LLM). Они облегчают хранение данных (PutChroma) и поиск/запрос (QueryChroma) в базе данных Chroma или аналогичной системе.

в заключение

Приоритет интеграции Python в Apache NiFi знаменует собой важную веху в преодолении разрыва между инженерами по обработке и анализом данных , одновременно расширяя универсальность и применимость платформы.

Предоставляя энтузиастам Python возможность беспрепятственно разрабатывать компоненты NiFi на Python, цикл разработки упрощается, ускоряя внедрение конвейеров данных и рабочих процессов.

Это захватывающее время для процессоров Python в NiFi , и вклад в экосистему может быть очень ценным. Разработка и совместное использование процессоров Python может расширить функциональность NiFi и решить конкретные случаи использования.

Чтобы начать работу с NiFi, пользователи могут обратиться к Краткому руководству по разработке и Руководству разработчика NiFi для получения более полной информации о том, как внести свой вклад в проект.

Эта статья была впервые опубликована на Yunyunzhongsheng ( https://yylives.cc/ ), приглашаем всех посетить ее.

Я решил отказаться от открытого исходного кода Hongmeng Ван Чэнлу, отец Hongmeng с открытым исходным кодом: Hongmeng с открытым исходным кодом — единственное мероприятие в области промышленного программного обеспечения, посвященное архитектурным инновациям в области базового программного обеспечения в Китае: выпущен OGG 1.0, Huawei предоставляет весь исходный код. Google Reader уничтожен «горой кодового дерьма» Официально выпущена Ubuntu 24.04 LTS Перед официальным выпуском Fedora Linux 40 разработчики Microsoft: производительность Windows 11 «смехотворно плоха», Ма Хуатэн и Чжоу Хунъи пожимают друг другу руки, «устраняя обиды» Известные игровые компании издали новые правила: свадебные подарки сотрудникам не должны превышать 100 000 юаней. Pinduoduo был осужден за недобросовестную конкуренцию. Компенсация в размере 5 миллионов юаней.
{{o.name}}
{{м.имя}}

рекомендация

отmy.oschina.net/u/6919515/blog/11059170
рекомендация