如何捆绑使用多个捆绑包的自定义NiFi处理器?

时间:2019-09-25 17:35:08

标签: maven hadoop pom.xml apache-nifi

我编写了一个Custom NiFi处理器,该处理器使用一些Hadoop类,处理流文件并序列化与Avro之间的流文件。

据我所知

  • 要使用Hadoop类而不将其打包为NAR的一部分,我将需要 nifi-hadoop-nar 捆绑包和

  • 要向/从Avro序列化流文件内容,我将需要RecordSetWriter和reader,它们是 record-serialization-services-api 的一部分。

如果我的假设是错误的,请纠正我。

我已经编写了代码,对其进行了测试,并且一切正常,直到尝试将NAR部署到NiFi。

当我部署NAR并重新启动NiFi时,它会抛出java.lang.ClassNotFoundException: org.apache.nifi.serialization.RecordSetWriterFactory异常。

我的NAR的pom.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 BUT,然后NiFi抱怨找不到下一个类的错误。

我想知道:

  • 在NiFi项目的代码中,我发现了多个嵌套的包,它们之间的关系类似于nifi-nar-bundles-> nifi--bundle->。如何在处理器中引用两个捆绑软件?据我所知,自定义处理器只能有一个父NAR和NAR = bundle?

  • 在pom.xml中指定多个NiFi捆绑包的首选方法是什么

  • 理想情况下,我不想在我的NAR文件中捆绑Hadoop相关的依赖项或NiFi依赖项。还是NiFi强制捆绑这些依赖项?

1 个答案:

答案 0 :(得分:0)

    <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