0

所以,我是第一次使用 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 中的管道中添加一些处理,要么我在沙箱中寻找错误的位置。有人可以建议吗?

4

2 回答 2

3

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

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

因此,为了解决该错误,您需要一个 UpdateAttribute 处理器[3],它将“文件名”属性更改为唯一值。

[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

于 2017-01-09T00:18:47.173 回答
0

终于得到了这个工作。构建了一个包含 4 个处理器的数据流:

  • 获取HTTP
  • 评估XPath
  • 2 个 PutHDFS,一个用于“匹配”,一个用于“不匹配”

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

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

于 2017-01-10T22:44:40.510 回答