我尝试在分布式缓存上存储本地文件。 该文件存在,但我得到一个文件未找到异常
代码片段:
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)
有什么想法吗?
答案 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
确保此路径存在。
中找到更多命令答案 1 :(得分:0)