2013-10-15 61 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