1

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

编辑:我正在尝试这样做(3)重新分区加入的预处理,如此处所述:链接

4

2 回答 2

1

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

于 2013-01-14T04:32:38.210 回答
0

你为什么想做这个?Hadoop 使用的数据局部性原则可以为您做到这一点。好吧,它不会移动数据,它会移动程序。

这来自关于 Hadoop 的 Wikipedia 页面:

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 为应用程序提供了接口,以使自己更靠近数据所在的位置。

于 2013-01-14T14:03:28.860 回答