尝试在hadoop分布式缓存中存储文件时发生filenotfound异常

5w9g7ksd  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(379)

我尝试在分布式缓存中存储一个本地文件。该文件存在,但我得到一个文件找不到异常
代码片段:

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)

有什么想法吗?

wqsoz72f

wqsoz72f1#

尝试这样构造uri:

new File(<path_to_file>).toURI()

更多细节在这里。

im9ewurl

im9ewurl2#

首先要做的是在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

以确保此路径存在。
更多命令可以在hadoop1.2.1的shell命令中找到

相关问题