gpt4 book ai didi

java - 从本地复制文件

转载 作者:行者123 更新时间:2023-12-02 21:45:12 26 4
gpt4 key购买 nike

我正在尝试通过以下三种方式将文件从本地复制到 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

非常感谢您的帮助。

蛋白石

最佳答案

这段代码在哪里运行?

如果此代码在 map 或 reduce 方法中运行(看起来是因为您有一个 Context 实例),那么您正在您的一个从节点上执行。你的所有从节点都可以看到这个路径还是只有集群的登录节点才能看到文件?

如果此代码实际上应该在映射器或 reducer 中运行,并且文件不是这些机器的本地文件(并且您不想使用“hdfs fs -put”命令将文件放入 hdfs) ,您可以选择使用 hadoop 分布式缓存将文件与您的作业一起部署。您可以使用 DistributedCache 以编程方式执行此操作。类的静态方法 addCacheFile,或者如果您的主类实现 Tool,则通过命令行接口(interface)使用-files switch .

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

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);

如果您的主类实现 Tool,则从命令行接口(interface):

hadoop jar Your.jar Package.Path.To.MainClass -files comma,separated,list,of,files program_argument_list_here

关于java - 从本地复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25914819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com