2017-08-01 305 views
0

我使用GetHTTPS - > UpdateAttribute - > PutHDFS流,以便從API中讀取json文件,每次可以說30秒並將文件放入HDFS。第二步使用當前的日期/時間戳更改文件名屬性,這樣我們就不會有相同的文件名衝突。NiFi:UpdateAttribute更改文件名

到目前爲止我試過:
${filename: prepend(${now():format("yyyy-MM-dd-HH:mm:ss")})}
導致:

錯誤PutHDFS無法寫入HDFS由於java.lang.IllegalArgumentException異常:java.net。的URISyntaxException:絕對URI 相對路徑:.2017-08-01-11:01:13 filename.json

我不知道在哪裏這個錯誤來自老實說,再加上有一個點(。 )在錯誤消息中的創建文件名中的日期之前,根據用於預先給定文件名的表達式,該錯誤消息中不應該存在該錯誤消息。在第二步沒有任何文件名操作的情況下,一切正常。任何幫助都非常感謝,提前感謝!

+0

@ Balalaika..2017 -08-01-11:01:13filename.json是錯誤的,你不應該使用該名稱創建文件 –

+0

@Mahendraprabhu你是什麼意思,請你詳細說明一下? – balalaika

+0

您試圖更改文件名稱嗎? –

回答

4

您的問題顯示您的文件名包含一些可能爲'。'的無效字符。要麼 ':'。

你必須使用下面的表達式來存儲毫秒和文件名。

${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

的文件的名稱你不必使用'replace()',因爲你可以簡單地格式化日期和時間而不會引入':' - '$ {filename:prepend($ {now():format(「yyyy-MM-dd -HH-mm-ss」)})}'。 – Andy

0

你有一個invalied字符 ':'

更改分號(:)的時間。

試試這個,

$ {文件名:前置($ {NOW():格式( 「YYYY-MM-DD-HH-MM-SS」)})}