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