【发布时间】:2017-09-30 18:00:35
【问题描述】:
我想编写 nifi 处理器,它可以从 hdfs 目录读取 xml 文件,然后将其数据提取到流文件属性中,如果有两个 nifi 处理器可以获取此文件并读取数据的情况,或者向其中写入一些内容我怎样才能进行文件锁定,以便一次只有一个处理器可以使用它?您能否向我推荐任何可以帮助我的文章、代码示例或一些相关材料。我还没有编写任何自定义处理器。
【问题讨论】:
标签: apache-nifi
我想编写 nifi 处理器,它可以从 hdfs 目录读取 xml 文件,然后将其数据提取到流文件属性中,如果有两个 nifi 处理器可以获取此文件并读取数据的情况,或者向其中写入一些内容我怎样才能进行文件锁定,以便一次只有一个处理器可以使用它?您能否向我推荐任何可以帮助我的文章、代码示例或一些相关材料。我还没有编写任何自定义处理器。
【问题讨论】:
标签: apache-nifi
我不确定为什么在这种情况下需要编写自定义处理器,因为GetHDFS 和EvaluateXPath 处理器都存在并且应该能够在这里执行必要的任务。
在将流文件内容提取到属性中时要小心,因为流文件内容存储在内容存储库中,并且当流文件在流中移动时,只会传递一个引用指针。然而,属性存储在流文件存储库中,并占用堆空间以便快速检索。很容易摄取一大块源数据,一不小心就会不小心把整块数据放入堆中。有关详细信息,请参阅Apache NiFi In Depth。
如果您仍然对执行定制处理器开发感兴趣,this article by Bryan Bende 是一个很好的起点。引用的版本已经过时,但所描述的过程应该可以很好地支持。 Apache NiFi Developer Guide 是另一个。最后,Apache NiFi Contributor Guide 有 checkstyle 说明,配置开发环境的技巧等。
【讨论】:
这里有两个问题:
1 - 如何将 XML 提取到 Flowfile 属性中?
选项:
SplitXML -> EvaluateXPath (destination flowfile attribute) ->ReplaceText (to use the attributes)
TransformXML -> SplitJSON-> evaluateJsonPath (destination flowfile attribute) ->ReplaceText (to use the attributes)
2 - 如何确保文件只被处理一次? getfile/gethdfs 过程具有“保留源文件”选项,是处理时的移动/删除/保留选项。 您可以将其移至暂存区域并在处理后移回
【讨论】: