2

ローカル ファイルを分散キャッシュに保存しようとしています。ファイルは存在しますが、File not found 例外が発生します

コードフラグメント:

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)

何か案は?

4

2 に答える 2

1

最初に行うことは、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

このパスが存在することを確認します。

Hadoop 1.2.1 のシェル コマンドには、さらに多くのコマンドがあります。

于 2013-10-16T10:10:08.290 に答える
0

次のように URI を作成してみてください。

new File(<path_to_file>).toURI()

詳細はこちら

于 2013-10-15T16:20:06.830 に答える