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

时间:2017-01-08 23:46:04

标签: hadoop apache-nifi hortonworks-sandbox

所以,我第一次使用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中为管道添加一些处理,或者我在沙箱中找错了位置。有人可以提出建议吗?

2 个答案:

答案 0 :(得分:3)

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

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

因此,为了解决该错误,您需要一个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

答案 1 :(得分:0)

终于搞定了。构建了包含4个处理器的数据流:

  • getHTTP
  • evaluateXPath
  • 2 x PutHDFS,一个用于匹配'一个用于'匹配'

我认为这是一个正确指定自动终止关系的案例(选择'成功'以及'失败')。

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