2013-10-15 63 views
2

我嘗試在分佈式緩存中存儲本地文件。 該文件存在,但我得到未發現異常FileNotFound嘗試在hadoop分佈式緩存中存儲文件時出現異常

的代碼片段文件:

DistributedCache.addCacheFile(new URI("file://"+fileName), conf); 
RunningJob job = JobClient.runJob(conf); 

例外:

Error initializing attempt_201310150245_0066_m_000021_0: 
java.io.FileNotFoundException: File /Workflow/data does not exist 
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:468) 
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:380) 
    at org.apache.hadoop.filecache.TaskDistributedCacheManager.setupCache(TaskDistributedCacheManager.java:180) 
    at org.apache.hadoop.mapred.TaskTracker$4.run(TaskTracker.java:1454) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:396) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408) 
    at org.apache.hadoop.mapred.TaskTracker.initializeJob(TaskTracker.java:1445) 
    at org.apache.hadoop.mapred.TaskTracker.localizeJob(TaskTracker.java:1360) 
    at org.apache.hadoop.mapred.TaskTracker.startNewTask(TaskTracker.java:2786) 

任何想法?

+0

發現是該文件確實在'/工作流/ data'或者是在'/ somepath /工作流/ data'? – cabad

+0

這很可能是URI需要是hdfs嗎? –

+0

@Ophir,我面臨同樣的問題。我已經確認該文件存在於HDFS中,但仍然出現此問題。你是如何解決你的問題的? – Shekhar

回答

0

嘗試構建URI是這樣的:

new File(<path_to_file>).toURI() 

更多細節here

+0

我試過了 - 它沒有幫助 –

1

要做的第一件事就是把你的文件放在HDFS中,而hadoop正在運行。你可以做到這一點與

hadoop dfs -copyFromLocal <localPath> <HDFSPath>

我不認爲你需要的‘文件://’前綴。 嘗試類似的東西:

DistributedCache.addCacheFile(new URI("/user/hduser/stopwords/stopwords.txt"), conf); 

爲確保這條道路在HDFS存在,而不是在你的本地文件系統。

例如,您可以運行命令

hdfs dfs -ls /user/hduser/stopwords 

,以確保該路徑存在。

更多命令可以在shell commands for hadoop 1.2.1

+1

我更喜歡不涉及複製到hdfs的解決方案 –

+0

這樣做嗎?方法的幫助? https://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/filecache/DistributedCache.html#setLocalFiles%28org.apache.hadoop.conf.Configuration,%20java.lang.String%29 – vefthym