NiFi:UpdateAttribute更改文件名

时间:2017-08-01 09:30:24

标签: hadoop apache-nifi

我使用GetHTTPS - > UpdateAttribute - > PutHDFS流程是为了从API读取json文件,每次让我们说30秒并将文件放入HDFS。第二步使用当前日期/时间戳更改filename属性,以便我们没有相同的文件名冲突。

到目前为止我已尝试过:
${filename: prepend(${now():format("yyyy-MM-dd-HH:mm:ss")})}
这导致:

错误PutHDFS由于java.lang.IllegalArgumentException:java.net,无法写入HDFS。的URISyntaxException: 绝对URI中的相对路径:.2017-08-01-11:01:13-filename.json

我不确定这个错误来自哪里,说实话,在错误消息中创建的文件名中的日期之前有一个点(。)根据用于添加文件名的表达式不应该存在。在第二步中没有任何文件名操作,一切都按预期工作。任何帮助都非常感谢,提前感谢!

2 个答案:

答案 0 :(得分:6)

您的问题显示您的文件名包含一些可能是“。”的无效字符。或':'。

你必须使用下面的表达式来存储带文件名的毫秒数。

${filename:prepend(${now():toNumber()})}

toNumber,将日期转换为毫秒。

如果您愿意,也可以这样存储。

${filename:prepend(${now():format("yyyy-MM-dd-HH-mm-ss")})}

或者您可以使用UUID()作为文件名前缀。

https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html#uuid

答案 1 :(得分:1)

你有一个无效的角色':'

在时间中更改分号(:)。

试试这个,

$ {filename:prepend($ {now():format(" yyyy-MM-dd-HH-mm-ss")})}