【问题标题】:Remotely retrieve a file from hdfs and store it locally in a node从 hdfs 远程检索文件并将其本地存储在节点中
【发布时间】:2013-03-09 23:08:54
【问题描述】:

我想编写一个作业,其中每个映射器检查来自 hdfs 的文件是否存储在正在执行的节点中。如果没有发生这种情况,我想从 hdfs 检索它并将其本地存储在此节点中。这可能吗?

编辑:我正在尝试执行此操作 (3) 重新分区连接的预处理,如此处所述:link

【问题讨论】:

  • 本地存储是指在数据节点中,还是在运行映射器实例的节点上的预定义位置?您能详细说明您正在尝试做的事情吗?
  • @Chris 谢谢!我想这是第二个了。我已经添加了我想做的事情。

标签: hadoop hdfs


【解决方案1】:

Hadoop 中的DistributedCache 功能可用于分发完成作业所需的辅助数据或辅助数据。这里 (1, 2) 是一些有趣的文章。

【讨论】:

  • 非常感谢。我也是这么想的,但我不确定,因为我试图解决的问题中的伪代码有点令人困惑..
【解决方案2】:

您为什么要这样做? Hadoop 使用的数据局部性 原则为您做到了这一点。嗯,它不会移动数据,它会移动程序。

这来自关于 Hadoop 的维基百科页面:

jobtracker 将 map/reduce 作业调度到 tasktracker 数据位置的意识。这方面的一个例子是如果节点 A 包含数据 (x,y,z),节点 B 包含数据 (a,b,c)。这 jobtracker 将调度节点 B 在 (a,b,c) 上执行 map/reduce 任务 并且节点 A 将被安排在 (x,y,z) 上执行 map/reduce 任务

Hadoop 文档本身解释了将计算转移到数据而不是相反的原因:

“移动计算比移动数据便宜”应用程序请求的计算如果被执行,效率会高得多 靠近它操作的数据。当大小为 数据集是巨大的。这样可以最大限度地减少网络拥塞并增加 系统的整体吞吐量。假设是 通常最好将计算迁移到更靠近数据所在的位置 定位而不是将数据移动到应用程序所在的位置 跑步。 HDFS 为应用程序提供了自己移动的接口 更靠近数据所在的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2020-11-29
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多