我想编写一个作业,其中每个映射器检查来自hdfs的文件是否存储在正在执行的节点中。如果没有发生这种情况,我想从hdfs检索它并将其本地存储在此节点中。这可能吗?
编辑:我正在尝试这样做(3)重新分区加入的预处理,如下所述:link
答案 0 :(得分:1)
DistributedCache功能可用于分发完成作业所需的辅助数据或辅助数据。这里(1,2)是一些有趣的文章。
答案 1 :(得分:0)
你为什么要这样做? Hadoop使用的数据位置原则为您完成此操作。好吧,它不会移动数据,它会移动程序。
这来自关于Hadoop的维基百科页面:
jobtracker安排使用a来映射/减少作业到tasktrackers 了解数据位置。一个例子是节点A 包含数据(x,y,z),节点B包含数据(a,b,c)。该 jobtracker将安排节点B在(a,b,c)上执行map / reduce任务 和节点A将被安排在(x,y,z)
上执行map / reduce任务
Hadoop文档本身解释了计算转移到数据而不是相反的原因:
“移动计算比移动数据便宜”如果执行,则应用程序请求的计算效率更高 靠近它运行的数据。当大小时,尤其如此 数据集很大。这最大限度地减少了网络拥塞并增加 系统的整体吞吐量。假设是 通常更好地将计算迁移到更接近数据的位置 找到而不是将数据移动到应用程序所在的位置 运行。 HDFS为应用程序提供了移动自身的接口 离数据所在的位置越近。