如何解决关系失败?

时间:2016-11-10 11:06:31

标签: hortonworks-data-platform apache-nifi

我有一个似乎正在正确创建FlowFiles的处理器(修改了标准处理器),但是当它转到commit()会话时,会引发异常:

2016-10-11 12:23:45,700 ERROR [计时器驱动的进程线程-6] cscprocessors.files.GetFileData [GetFileData [id = 8f5e644d-591c-4df1-8c79-feea118bd8c0]]无法检索到期文件to {} org.apache.nifi.processor.exception.FlowFileHandlingException:未指定StandardFlowFileRecord传输关系

我假设这应该表明没有可用于提交传输的连接;但是,在init()期间注册的“成功”关系与原始处理器一样,并且成功关系out应该连接到另一个处理器输入。

有关故障排除的任何建议吗?

1 个答案:

答案 0 :(得分:5)

您对标准处理器做了哪些更改?如果要在ProcessSession对象上调用方法,请确保保存从这些方法调用返回的FlowFile的最新“版本”,并仅将最新版本传输到“成功”。

FlowFile引用是不可变的;通常在代码中,您会看到一个初始引用,如“flowFile”指向传入的流文件(例如来自session.get()),然后在流文件发生变异时更新,例如flowFile = session.putAttribute(flowFile, "myAttribute", "myValue")。< / p>

还要确保已将每个不同流文件的最新版本(而不是对同一流文件的各种引用)转移或删除到某种关系(如果需要,甚至可以Relationship.SELF)。如果处理器创建新的流文件,请确保传输新的流文件。如果不再需要传入的流文件,请务必在其上调用session.remove()

NiFi Developer's Guide中有一些常见的模式和附加指南,包括测试模式;此处理器的单元测试应该能够清除此错误(通过断言在测试期间应该将多少个流文件传输到哪个关系)。