所以,我是第一次使用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,并感谢其他人的评论。