gpt4 book ai didi

apache - Hadoop DistributedCache缓存文件没有绝对路径?

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

我正在迁移到 YARN,似乎 DistributedCache 的行为发生了变化。

以前,我会将一些文件添加到缓存中,如下所示:

for (String file : args) {
Path path = new Path(cache_root, file);
URI uri = new URI(path.toUri().toString());
DistributedCache.addCacheFile(uri, conf);
}

路径通常看起来像
/some/path/to/my/file.txt

哪个预先存在于 HDFS 上,基本上最终会在 DistributedCache 中作为
/$DISTRO_CACHE/some/path/to/my/file.txt

我可以在我当前的工作目录中对它进行符号链接(symbolic link)并与 DistributedCache.getLocalCacheFiles() 一起使用

使用 YARN,该文件似乎最终在缓存中为:
/$DISTRO_CACHE/file.txt

即,文件 URI 的“路径”部分被删除,只剩下文件名。

如何处理以相同文件名结尾的不同绝对路径?考虑以下情况:
DistributedCache.addCacheFile("some/path/to/file.txt", conf);
DistributedCache.addCacheFile("some/other/path/to/file.txt", conf);

可以说有人可以使用片段:
DistributedCache.addCacheFile("some/path/to/file.txt#file1", conf);
DistributedCache.addCacheFile("some/other/path/to/file.txt#file2", conf);

但这似乎不必要地难以管理。想象一下那些是命令行参数的场景,您需要以某种方式管理这两个文件名,尽管不同的绝对路径肯定会在 DistributedCache 中发生冲突,因此需要将这些文件名重新映射到片段并像这样传播到其余的该程序?

有没有更简单的方法来管理这个?

最佳答案

尝试将文件添加到 Job

这很可能是您实际配置作业然后在 Mapper 中访问它们的方式。

当你设置工作时,你会做类似的事情

    job.addCacheFile(new Path("cache/file1.txt").toUri());
job.addCacheFile(new Path("cache/file2.txt").toUri());

然后在您的映射器代码中,url 将存储在一个可以像这样访问的数组中。
    URI file1Uri = context.getCacheFiles()[0];
URI file2Uri = context.getCacheFiles()[1];

希望这可以帮助你。

关于apache - Hadoop DistributedCache缓存文件没有绝对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29092133/

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