2016-06-08 152 views
1

我想監視HDFS中的存儲庫以讀取和處理複製到它的文件中的數據(將文件從本地系統複製到HDFS我使用hdfs dfs -put),有時會產生問題: Spark Streaming:java.io.FileNotFoundException:文件不存在:。 複印所以我讀了論壇的問題,問題在這裏Spark Streaming: java.io.FileNotFoundException: File does not exist: <input_filename>._COPYING_ 根據我讀的問題是與星火流讀取文件,它完成複製在HDFS和Github上之前: https://github.com/maji2014/spark/blob/b5af1bdc3e35c53564926dcbc5c06217884598bb/streaming/src/main/scala/org/apache/spark/streaming/dstream/FileInputDStream.scala,他們說他們糾正這個問題,但只有FileInputDStream,因爲我可以看到,但我使用textFileStream 當我試圖使用FileInputDStream IDE會引發錯誤符號不能從這個地方訪問。 有誰知道如何過濾掉那些仍在COPYING,因爲我試過的文件:Spark Streaming textFileStream COPYING

var lines = ssc.textFileStream(arg(0)).filter(!_.contains("_COPYING_") 

但沒有工作,它的預期,因爲過濾器應在文件過程中,我猜的名字被應用我無法訪問 正如你所看到的,我在問這個問題之前做了大量的研究,但沒有幸運, 請幫忙嗎?

+0

在你的代碼的哪一點你會得到錯誤?在流式傳輸或第一次轉換之後立即進行? – Vale

+0

@Vale這個錯誤並沒有一直出現,我做了一個shell程序,把文件放在HDFS中,並且它運行得很好,直到我得到那個錯誤爲止 – Jean

回答

2

所以我看了一下:-put is the wrong method。查看最終評論:您必須在shell腳本中使用-rename才能在HDFS上執行原子事務。

+0

謝謝你的回答,但你能解釋一下嗎對我來說我如何使用重命名?你的意思是,而不是使用「hdfs dfs -put fileName directoryName」我應該使用「hdfs dfs -rename fileName directoryName」? – Jean

+1

'hadoop fs -mv oldName newName'用於自動移動文件並對它們進行重命名(重命名不在hadoop中;我錯了,對不起!) – Vale

+0

謝謝,但我很困惑,因爲這個命令沒有目標目錄,因爲我正在從本地文件移動文件,所以我不知道舊名稱 – Jean