Nifi自定义处理器异常

时间:2016-02-25 09:23:27

标签: apache-nifi

我正在使用Nifi 0.4.1版本。我正在编写自定义代码以将CSV转换为avro格式。我创建了类文件,并能够生成nar文件。将nar文件放在lib目录中并重新启动nifi服务器。

类文件没有任何错误或警告。

在nifi工作区拖动处理器时,无法看到为将csv转换为avro而创建的类。

任何帮助表示赞赏..

谢谢,

1 个答案:

答案 0 :(得分:7)

您可以查看一些内容来诊断处理器问题:

  1. 提供商配置文件
  2. 处理器类
  3. lib目录中的NAR
  4. nifi-app.log中的ExtensionManager条目
  5. nifi-app.log中的错误
  6. 听起来你已经检查了一些,但请确认所有这些:

    提供商配置文件

    必须使用Java代码在同一个nar文件中的服务配置文件中引用您的处理器。该文件将命名为org.apache.nifi.processor.Processor, 并且每行处理器实现将包含一个完全限定的类名。查看示例很有帮助,例如provider config for nifi-solr-processors

    org.apache.nifi.processors.solr.PutSolrContentStream
    org.apache.nifi.processors.solr.GetSolr
    

    处理器类

    确保您的处理器类是公共的,实现org.apache.nifi.processor.Processor,继承自org.apache.nifi.processor.AbstractProcessor或其他处理器实现。您应确保完全限定的类名与上面的提供程序配置文件匹配。

    public abstract class SolrProcessor extends AbstractProcessor {
    ...
    public class GetSolr extends SolrProcessor {
    ...
    public class PutSolrContentStream extends SolrProcessor {
    ...
    

    lib目录

    中的NAR

    您的nar文件应放在NiFi安装的lib目录中。如果在您的设置中有任何问题,请确保NiFi用户具有该权限。听起来你已经检查了这个。

    nifi-app.log中的ExtensionManager条目

    启动NiFi后,查看logs/nifi-app.log。 ExtensionManager将输出从lib目录中找到并加载的所有扩展的列表。它看起来像这样(编辑长度):

    org.apache.nifi.nar.ExtensionManager Extension Type Mapping to Classloader:
    === ControllerService type || Classloader ===
    org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService || org.apache.nifi.nar.NarClassLoader[.\work\nar\extensions\nifi-aws-nar-0.6.0-SNAPSHOT.nar-unpacked]
    org.apache.nifi.distributed.cache.server.DistributedSetCacheServer || org.apache.nifi.nar.NarClassLoader[.\work\nar\extensions\nifi-distributed-cache-services-nar-0.6.0-SNAPSHOT.nar-unpacked]
    org.apache.nifi.distributed.cache.client.DistributedSetCacheClientService || org.apache.nifi.nar.NarClassLoader[.\work\nar\extensions\nifi-distributed-cache-services-nar-0.6.0-SNAPSHOT.nar-unpacked]
    ...
    === End ControllerService types ===
    === Processor type || Classloader ===
    org.apache.nifi.processors.standard.GetHTTP || org.apache.nifi.nar.NarClassLoader[.\work\nar\extensions\nifi-standard-nar-0.6.0-SNAPSHOT.nar-unpacked]
    org.apache.nifi.processors.script.ExecuteScript || org.apache.nifi.nar.NarClassLoader[.\work\nar\extensions\nifi-scripting-nar-0.6.0-SNAPSHOT.nar-unpacked]
    org.apache.nifi.processors.aws.s3.DeleteS3Object || org.apache.nifi.nar.NarClassLoader[.\work\nar\extensions\nifi-aws-nar-0.6.0-SNAPSHOT.nar-unpacked]
    org.apache.nifi.processors.standard.ExecuteSQL || org.apache.nifi.nar.NarClassLoader[.\work\nar\extensions\nifi-standard-nar-0.6.0-SNAPSHOT.nar-unpacked]
    org.apache.nifi.processors.mongodb.GetMongo || org.apache.nifi.nar.NarClassLoader[.\work\nar\extensions\nifi-mongodb-nar-0.6.0-SNAPSHOT.nar-unpacked]
    ...
    

    您希望在此列表中找到您的处理器,控制器服务或报告任务。

    nifi-app.log中的错误

    如果找到并加载,则在执行代码时可能会抛出异常,这也会出现在nifi-app.log中。例如,如果您在提供程序配置文件中添加了错误的类名,则会得到“#34;提供程序未找到"错误:

    java.util.ServiceConfigurationError: org.apache.nifi.processor.Processor: Provider org.apache.nifi.processors.test.TestProcessor not found
        at java.util.ServiceLoader.fail(ServiceLoader.java:239) ~[na:1.8.0_65]
        at java.util.ServiceLoader.access$300(ServiceLoader.java:185) ~[na:1.8.0_65]
        at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:372) ~[na:1.8.0_65]
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404) ~[na:1.8.0_65]
        at java.util.ServiceLoader$1.next(ServiceLoader.java:480) ~[na:1.8.0_65]
        at org.apache.nifi.nar.ExtensionManager.loadExtensions(ExtensionManager.java:107) ~[nifi-nar-utils-0.6.0-SNAPSHOT.jar:0.6.0-SNAPSHOT]
        at org.apache.nifi.nar.ExtensionManager.discoverExtensions(ExtensionManager.java:88) ~[nifi-nar-utils-0.6.0-SNAPSHOT.jar:0.6.0-SNAPSHOT]
        at org.apache.nifi.NiFi.<init>(NiFi.java:120) ~[nifi-runtime-0.6.0-SNAPSHOT.jar:0.6.0-SNAPSHOT]
        at org.apache.nifi.NiFi.main(NiFi.java:227) ~[nifi-runtime-0.6.0-SNAPSHOT.jar:0.6.0-SNAPSHOT]