Java 从本地复制文件
我试图通过以下三种方式将文件从本地复制到hdfs: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/")
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);