2017-01-08 35 views
0

因此,我第一次使用NiFi。我試圖用它來調用API,然後將數據傳輸到HDFS(Hortonworks Sandbox 2.4)。我目前只使用2個處理器:GetHTTP & PutHDFS。使用Nifi將數據導入HDFS - 無法訪問文件

我似乎有兩個處理器配置好...他們運行,但我不能找到當我通過Ambari進入Hadoop時創建的輸出文件...我已經將輸出目錄設置爲/ user /,但沒有出現。然而,我的PutHDFS處理器提供諮詢意見得到一個警告消息:

WARNING PutHDFS[...] penalizing StandardFlowFileRecord[...] and routing to failure because file with same name already exists. 

...這樣一個文件必須得到地方寫。我試着改變指定xml和JSON格式的API調用,但沒有明顯的區別。

我想我必須要麼在NiFi中添加一些處理到管道中,要麼我在沙箱中找錯了地方。任何人都可以提醒一下嗎?

回答

0

最後得到了這個工作。建包括4個處理器的數據流:

  • getHTTP
  • evaluateXPath
  • 2×PutHDFS,一個用於 '匹配',一個用於 '不匹配的'

我認爲這是的情況下正確地指定自動終止關係(在終端中選擇「成功」和「失敗」)。

感謝http://nifi.rocks/getting-started-with-apache-nifi提供的積木和感謝其他人的意見。

3

PutHDFS處理器讀取傳入FlowFile上的「filename」屬性,並將其用作HDFS中的文件名。正如文獻[1]所述。

GetHTTP將「文件名」屬性設置爲「..遠程服務器上文件的名稱」[2]。所以我猜你是GetHTTP處理器每次都得到相同的文件,因此每個FlowFile的「filename」屬性都是相同的。

所以爲了解決這個錯誤,你需要一個UpdateAttribute處理器[3],它將「文件名」屬性更改爲一個唯一的值。

[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

+0

謝謝@ JDP10101。對於後續文件具有相同標題的錯誤請記住您的觀點。我將使用UpdateAttribute處理器來嘗試解決此問題。我仍然有一個問題,但爲什麼我目前無法在HDFS中看到該文件?你知道這可能是爲什麼,或者一旦我將UpdateAttribute處理器合併爲一個擴展名爲.xml的文件,它是否應該在輸出目錄中可見?謝謝你的幫助。 – Jon295087

+3

如果您SSH到沙箱並運行「hadoop fs -ls/user /」,您會看到該文件嗎?通常情況下,您不會將數據直接放在/ user中,您可以爲特定用戶創建一個子目錄。 –

+0

謝謝@BryanBende但不害怕。當我列出目錄中的所有文件時,我仍然沒有看到輸出。我創建了一個子目錄'/ user/maria_dev/MetFiles /'並配置處理器將文件輸出到這個位置,但是當我使用PuTTy連接到沙箱時,我仍然沒有看到任何東西。非常感謝您提出任何其他我可以嘗試的建議。 – Jon295087