所以,我第一次使用nifi。我尝试使用它来调用api,然后将数据通过管道传输到hdfs(hortonworks sandbox 2.4)。我目前只使用两个处理器: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条答案
按热度按时间8ftvxx2r1#
puthdfs处理器读取传入流文件的“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
polkgigr2#
终于成功了。构建了一个包含4个处理器的数据流:
获取HTTP
评估路径
2个puthdfs,一个用于“匹配”,一个用于“不匹配”
我认为这是一个正确指定自动终止关系的例子(在列表中同时选择“success”和“failure”)。
贷记http://nifi.rocks/getting-started-with-apache-nifi 它提供了基石,并感谢其他人的评论。