Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在hadoop分布式缓存中存储文件时出现FileNotFound异常_Hadoop_Distributed Cache - Fatal编程技术网

尝试在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的解决方案。这种方法有用吗?