【问题标题】:Are getCacheFiles() and getLocalCacheFiles() the same?getCacheFiles() 和 getLocalCacheFiles() 是否相同?
【发布时间】:2014-10-21 17:44:53
【问题描述】:

由于 getLocalCacheFiles() 已被弃用,我正在尝试寻找替代方案。 getCacheFiles() 似乎是一个,但我怀疑它们是否相同。

当您调用addCacheFile()时,HDFS中的文件将被下载到每个节点,使用getLocalCacheFiles()您可以获得本地化文件路径,您可以从本地文件系统中读取它。但是,getCacheFiles() 返回的是 HDFS 中文件的 URI。如果您通过此 URI 读取文件,我怀疑您仍然从 HDFS 而不是本地文件系统读取。

以上是我的理解,不知道对不对。如果是这样,getLocalCacheFiles() 的替代方案是什么?为什么 Hadoop 一开始就弃用它?

【问题讨论】:

    标签: hadoop mapreduce hdfs distributed-cache


    【解决方案1】:

    它是开源的。你总能找到引入 @Deprectated 的 git blame:commit 735b50e8bd23f7fbeff3a08cf8f3fff8cbff7449,它是针对 MAPREDUCE-4493 的。在 JIRA 的尾部,您会发现以下讨论:

    Omkar Vinit Joshi 添加了评论 - 13/Jul/13 00:18
    Robert Joseph Evans 如果我们不推荐使用 getLocalCacheFiles 和 getCacheFiles jobContext() 那么用户将如何获取本地缓存文件 地图任务? YARN-916 是相关问题。谢谢。

    Robert Joseph Evans 添加了评论 - 19/Jul/13 15:27
    Omkar Vinit Joshi 通过打开当前工作目录中的符号链接。在 YARN 之前 默认行为是不在当前工作中创建符号链接 指向分布式缓存中项目的目录。如果你 想要链接,您必须专门打开该选项并提供 您想要的符号链接的名称。获取文件的唯一方法 没有符号链接是调用 getLocalCacheFiles 和 getCacheFiles。在 YARN 所有文件都将创建一个符号链接。的名称 文件/目录将是符号链接的名称。然而,它是 可能在我想要 hdfs://foo/bar.zip 的地方发生名称冲突 和 hdfs://bar/bar.zip。在 1.0 中,这两个都是 通过已弃用的 API 下载和访问,但在 YARN 中 将输出警告,并且只会下载其中一个。还 由于这些 API 的编写方式,映射器代码可能不会 知道只下载了一个,找不到 丢失的一个并炸毁。这就是为什么我不赞成他们赞成 推动人们总是使用符号链接,所以行为总是 持续的。

    Omkar Vinit Joshi 添加了评论 - 19/Jul/13 16:56
    罗伯特·约瑟夫·埃文斯听起来不错.. 然而,我们将把 基于文件名的限制..但考虑到这听起来很合理 事实上,这将阻止地图代码中的潜在错误,用户可以 绝对要对它们进行版本以避免它...谢谢...

    所以你应该只打开文件,它就会在那里。没有专用的 API。

    【讨论】:

    • 我使用的是 Hadoop 1.2.1,能否请您解释一下 getCacheFiles 和 getLocalCacheFiles 之间的区别?
    • 感谢您的回答。但是,您是否也可以使用代码位来更新答案作为替代方案。这样它将帮助我们直观地了解访问文件所必须的选择。会很清楚。
    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 2010-09-17
    • 2013-05-26
    • 1970-01-01
    • 2012-05-08
    相关资源
    最近更新 更多