FileNotFound尝试在hadoop分布式缓存中存储文件时出现异常

时间:2013-10-15 14:57:19

标签: hadoop distributed-cache

我尝试在分布式缓存上存储本地文件。 该文件存在,但我得到一个文件未找到异常

代码片段:

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)

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

首先要做的是将文件放在HDFS中,而hadoop正在运行。你可以用

做到这一点

hadoop dfs -copyFromLocal <localPath> <HDFSPath>

我认为你不需要“file://”前缀。 尝试类似的东西:

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 :(得分:0)

尝试构建这样的URI:

new File(<path_to_file>).toURI()

更多详情here