2016-09-10 62 views
1

我有一个扩展MergeContent PROC定制处理器和NiFi开始时我有这个错误日志的行为:nifi 1.0.0 - 扩展标准处理器

2016-09-09 18:17:00,607 ERROR [main] org.apache.nifi.NiFi Failure to launch NiFi due to java.util.ServiceConfigurationError: org.apache.nifi.processor.Processor: Provider org.apache.nifi.processors.standard.DetectDuplicate could not be instantiated 
java.util.ServiceConfigurationError: org.apache.nifi.processor.Processor: Provider org.apache.nifi.processors.standard.DetectDuplicate could not be instantiated 
     at java.util.ServiceLoader.fail(ServiceLoader.java:232) ~[na:1.8.0_101] 
     at java.util.ServiceLoader.access$100(ServiceLoader.java:185) ~[na:1.8.0_101] 
     at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:384) ~[na:1.8.0_101] 
     at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404) ~[na:1.8.0_101] 
     at java.util.ServiceLoader$1.next(ServiceLoader.java:480) ~[na:1.8.0_101] 
     at org.apache.nifi.nar.ExtensionManager.loadExtensions(ExtensionManager.java:107) ~[nifi-nar-utils-1.0.0.jar:1.0.0] 
     at org.apache.nifi.nar.ExtensionManager.discoverExtensions(ExtensionManager.java:88) ~[nifi-nar-utils-1.0.0.jar:1.0.0] 
     at org.apache.nifi.NiFi.<init>(NiFi.java:135) ~[nifi-runtime-1.0.0.jar:1.0.0] 
     at org.apache.nifi.NiFi.main(NiFi.java:243) ~[nifi-runtime-1.0.0.jar:1.0.0] 
Caused by: java.lang.NoClassDefFoundError: org/apache/nifi/distributed/cache/client/Serializer 
     at java.lang.Class.getDeclaredConstructors0(Native Method) ~[na:1.8.0_101] 
     at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) ~[na:1.8.0_101] 
     at java.lang.Class.getConstructor0(Class.java:3075) ~[na:1.8.0_101] 
     at java.lang.Class.newInstance(Class.java:412) ~[na:1.8.0_101] 
     at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380) ~[na:1.8.0_101] 
     ... 6 common frames omitted 
Caused by: java.lang.ClassNotFoundException: org.apache.nifi.distributed.cache.client.Serializer 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_101] 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_101] 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_101] 

在Nifi 0.6.1/0.7 .0它工作,但是当我尝试使用PutSQL proc时,我无法在属性列表中看到填充的DBCPConnectionPool服务。

有没有适当的方法来扩展标准处理器的行为?

回答

1

如果在NAR中扩展或使用来自另一个NAR的组件,则需要在它们之间存在NAR依赖关系。

此页面演示了如何设置一个处理器和独立NARS控制器服务之间的正确链接:

https://cwiki.apache.org/confluence/display/NIFI/Maven+Projects+for+Extensions#MavenProjectsforExtensions-LinkingProcessorsandControllerServices

这GitHub的项目也有相同的概念完全工作示例: https://github.com/bbende/nifi-dependency-example

从依赖关系的角度来看,扩展处理器和使用控制器服务应该是相同的设置,都需要能够从另一个NAR访问某些内容。

1

.pom从项目nifi-mycustom-nar添加以下的依赖:

<dependency> 
    <groupId>org.apache.nifi</groupId> 
    <artifactId>nifi-standard-nar</artifactId> 
    <version>1.4.0</version> 
    <type>nar</type> 
</dependency> 

请注意,只有一个NAR依赖是允许的,所以如果你有nifi-standard-services-api-nar depdencency,将其删除。

.pom从项目nifi-mycustom-processors添加以下的依赖:

<dependency> 
     <groupId>org.apache.nifi</groupId> 
     <artifactId>nifi-standard-processors</artifactId> 
     <version>1.4.0</version> 
     <scope>provided</scope> 
</dependency> 

最后,重新编译和新的NAR文件复制到$NIFI/lib目录。