Java 从本地复制文件

Java 从本地复制文件,java,hadoop,Java,Hadoop,我试图通过以下三种方式将文件从本地复制到hdfs: FileSystem fs = FileSystem.get(context.getConfiguration()); LocalFileSystem lfs = fs.getLocal(context.getConfiguration()); lfs.copyFromLocalFile(new Path("file:///pathToFile/file.properties"), new Path("/destPath/")

我试图通过以下三种方式将文件从本地复制到hdfs:

    FileSystem fs = FileSystem.get(context.getConfiguration());
    LocalFileSystem lfs = fs.getLocal(context.getConfiguration());

lfs.copyFromLocalFile(new Path("file:///pathToFile/file.properties"), new Path("/destPath/"));

fs.copyFromLocalFile(new Path("file:///pathToFile/file.properties"), new Path("/destPath/"));

fs.copyFromLocalFile(new Path("file:///pathToFile/file.properties"), new Path("/destPath/"));
但他们都没有工作。 我总是为/pathToFile/file.properties获取FileNotFound异常,但该文件在Unix上存在于该路径上,并且对运行Map/Reduce的用户具有读写权限

你知道我遗漏了什么吗

作业正在与Ozzie一起运行 CDH4

非常感谢你的帮助


opalo

此代码在哪里运行

如果这段代码是在map或reduce方法中运行的,因为您有一个上下文实例,那么您是在一个从属节点上执行的。您的所有从属节点都可以看到该路径吗?或者只有集群的登录节点可以看到该文件吗

如果此代码实际上应该在映射器或reducer中运行,并且文件不是这些机器的本地文件,并且您不希望使用hdfs-put命令将文件放入hdfs中,那么您可以选择使用hadoop分布式缓存在作业中部署文件。可以使用类的静态方法addCacheFile以编程方式执行此操作,如果主类通过使用实现接口,则可以通过命令行执行此操作

以编程方式从链接到上面的文档中复制:

如果主类实现了接口,请从命令行执行以下操作:


hadoop jar Your.jar Package.Path.To.MainClass-files逗号、分隔、列表、of、files program_argument_list(此处

文件所在的目录权限如何似乎没有问题drwxr xr xDo是否需要3个斜杠?我还尝试了fs.copyFromLocalFilenew Path/pathToFile/file.properties、new Path/destPath/;但它也不起作用。问题是,我可以在许多帖子中看到这是一种方式。但是我遗漏了一些让我的代码失败的东西。
JobConf job = new JobConf();
DistributedCache.addCacheFile(new URI("/myapp/lookup.dat#lookup.dat"), ob);
DistributedCache.addCacheArchive(new URI("/myapp/map.zip", job);
DistributedCache.addFileToClassPath(new Path("/myapp/mylib.jar"), job);
DistributedCache.addCacheArchive(new URI("/myapp/mytar.tar", job);
DistributedCache.addCacheArchive(new URI("/myapp/mytgz.tgz", job);
DistributedCache.addCacheArchive(new URI("/myapp/mytargz.tar.gz", job);