使用 Nifi 将数据摄取到 HDFS 中 - 无法访问文件



所以,我是第一次使用NiFi。我正在尝试使用它来调用API,然后将数据通过管道传输到HDFS(Hortonworks Sandbox 2.4)。我目前只使用2个处理器:GetHTTP和PutHDFS。

我似乎已经配置了两个处理器...它们运行,但我找不到通过 Ambari 进入 Hadoop 时创建的输出文件......我已将输出目录设置为/user/,但没有任何显示。但是,我在 PutHDFS 处理器上收到一条警告消息,建议:

WARNING PutHDFS[...] penalizing StandardFlowFileRecord[...] and routing to failure because file with same name already exists.

。所以文件必须写在某个地方。我尝试改变指定 xml 和 JSON 格式的 API 调用,但没有明显的区别。

我想我要么需要向 NiFi 中的管道添加一些处理,要么我在沙箱中找错了地方。谁能建议?

PutHDFS处理器读取传入FlowFile上的"filename"属性,并将其用作HDFS中的文件名。如文档中所述[1]。

GetHTTP 将"文件名"属性设置为"..远程服务器上文件的名称"[2]。所以我猜你是 GetHTTP 处理器每次都得到相同的文件,因此每个 FlowFile 上的"文件名"属性都是相同的。

因此,为了解决这个错误,你需要一个 UpdateAttribute 处理器[3],它将 "filename" 属性更改为唯一值。

[1] https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi.processors.hadoop.PutHDFS/index.html

[2] https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi.processors.standard.GetHTTP/index.html

[3] https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi.processors.attributes.UpdateAttribute/index.html

终于开始工作了。构建了包含 4 个处理器的数据流:

  • 获取链接
  • 评估XPath
  • 2 x PutHDFS,一个用于"匹配",一个用于"不匹配"

我认为这是正确指定自动终止关系的情况(在 中同时选择"成功"和"失败")。

感谢提供构建块的 http://nifi.rocks/getting-started-with-apache-nifi,并感谢其他人的评论。

最新更新