尝试在hadoop分布式缓存中存储文件时出现FileNotFound异常
我尝试在分布式缓存上存储一个本地文件。 该文件存在,但我得到一个“未找到文件”异常 代码片段:尝试在hadoop分布式缓存中存储文件时出现FileNotFound异常,hadoop,distributed-cache,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.FileNotFoundExceptio
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)
有什么想法吗?试着像这样构造URI:
new File(<path_to_file>).toURI()
新文件().toURI()
更多详细信息。首先要做的是在hadoop运行时将文件放入HDFS。你可以用它来做
hadoop dfs-copyFromLocal
我认为您不需要“file://”前缀。
试试这样:
DistributedCache.addCacheFile(new URI("/user/hduser/stopwords/stopwords.txt"), conf);
确保此路径存在于HDFS中,而不是本地文件系统中
例如,您可以运行该命令
hdfs dfs -ls /user/hduser/stopwords
以确保此路径存在
更多命令可以在中找到,文件是否真的在
/Workflow/data
中,还是在/somepath/Workflow/data
中?URI可能需要是hdfs?Ophir,我面临同样的问题。我已经确认HDFS中存在该文件,但仍然存在此问题。您是如何解决问题的?@Shekhar我使用了一种变通方法-这是一个小的配置文件,所以我将参数复制到作业配置中。我更喜欢一种不涉及复制到HDFS的解决方案。这种方法有用吗?