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

Ingesting data into HDFS using Nifi - can't access files

所以,我是第一次使用 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 将 "filename" 属性设置为“..远程服务器上文件的名称”[2]。所以我猜你是 GetHTTP 处理器每次都获取相同的文件,因此 "filename" 属性在每个 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 个处理器的数据流:

  • getHTTP
  • 评估 XPath
  • 2 个 PutHDFS,一个用于 'matched',一个用于 'unmatched'

我认为这是正确指定自动终止关系的情况(在 中同时选择 'success' 和 'failure')。

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