2

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

代码片段:

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)

有任何想法吗?

4

2 回答 2

1

要做的第一件事是在 hadoop 运行时将文件放入 HDFS。你可以这样做

hadoop dfs -copyFromLocal <localPath> <HDFSPath>

我不认为你需要“file://”前缀。尝试这样的事情:

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

确保此路径存在于 HDFS 中,而不是您的本地文件系统中。

例如,您可以运行命令

hdfs dfs -ls /user/hduser/stopwords

确保这条路径存在。

更多命令可以在hadoop 1.2.1 的 shell 命令中找到

于 2013-10-16T10:10:08.290 回答
0

尝试像这样构造 URI:

new File(<path_to_file>).toURI()

更多细节在这里

于 2013-10-15T16:20:06.830 回答