Как связать пользовательский процессор NiFi, который использует многократные связки? - PullRequest
0 голосов
/ 25 сентября 2019

Я написал один пользовательский процессор NiFi, который использует некоторые классы Hadoop, обрабатывает потоковые файлы и сериализует потоковые файлы в и из Avro.

Насколько мне известно

  • чтобы использовать классы Hadoop без упаковки их как части NAR, мне потребуется nifi-hadoop-nar bundle AND

  • для сериализации содержимого потокового файла в / из Avro, Iпотребуется RecordSetWriter и считыватель, которые являются частью record-serialization-services-api .

Пожалуйста, исправьте меня, если мои предположения неверны.

Я написал код, протестировал его, и все работает, как и ожидалось, пока я не попытаюсь развернуть NAR на NiFi.

Когда я развертываю NAR и перезагружаю NiFi, выдается java.lang.ClassNotFoundException: org.apache.nifi.serialization.RecordSetWriterFactory исключение.

Мои NARpom.xml выглядит следующим образом:

<dependencies>
        <dependency>
            <groupId>com.my_company.is.data.tools</groupId>
            <artifactId>custom-data-movement-processors</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-hadoop-nar</artifactId>
            <version>1.5.0</version>
            <type>nar</type>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-record-serialization-service-api</artifactId>
            <version>1.5.0</version>
            <scope>provided</scope>
        </dependency>
</dependencies>

, а файл pom.xml процессора выглядит следующим образом:

<dependencies>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-record-serialization-services</artifactId>
            <version>1.5.0</version>
            <scope>provided</scope>
        <dependency>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-record-serialization-services-api</artifactId>
            <version>1.5.0</version>
            <scope>provided</scope>
        <dependency>
</dependencies>

Поскольку я пометил nifi-record-serialization-services-api как provided, это не так.не может быть получен в результате файл NAR.Теперь я могу быстро исправить и удалить прицел и создать NAR, НО тогда NiFi жалуется на ошибку следующего класса не найдена.

Я хотел бы знать:

  • ВКод проекта NiFi Я нашел несколько вложенных пакетов, которые имеют отношение примерно к этому nifi-nar-bundles -> nifi - bundle ->.Как ссылаться на два пакета в моем процессоре?Насколько мне известно, пользовательский процессор может иметь только один родительский NAR и NAR = пакет?

  • Какой предпочтительный способ указать несколько пакетов NiFi в pom.xml

  • В идеале я не хочу связывать связанные с Hadoop зависимости или зависимости NiFi в моем файле NAR.или это все в NiFi для объединения этих зависимостей?

1 Ответ

0 голосов
/ 26 сентября 2019
    <packaging>nar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-hadoop-nar</artifactId>
            <version>1.5.0</version>
            <type>nar</type>
        </dependency>

должно быть достаточно для получения в результате атрибутов nar META-INF\MANIFEST.MF

Nar-Dependency-*

Nar-Dependency-Id: nifi-hadoop-nar
Nar-Dependency-Group: org.apache.nifi
Nar-Dependency-Version: 1.5.0
...