我尝试在分布式缓存中存储一个本地文件。该文件存在,但我得到一个文件找不到异常
代码片段:
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)
有什么想法吗?
2条答案
按热度按时间wqsoz72f1#
尝试这样构造uri:
更多细节在这里。
im9ewurl2#
首先要做的是在hadoop运行时将文件放入hdfs。你可以用它来做
hadoop dfs -copyFromLocal <localPath> <HDFSPath>
我认为你不需要“file://”前缀。试着这样做:确保此路径存在于hdfs中,而不是本地文件系统中。
例如,可以运行以下命令
以确保此路径存在。
更多命令可以在hadoop1.2.1的shell命令中找到