我编写了一个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强制捆绑这些依赖项?
答案 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