我想写一个作业,其中每个Map器检查hdfs中的文件是否存储在正在执行的节点中。如果没有发生这种情况,我想从hdfs中检索它并将其本地存储在该节点中。这可能吗?编辑:我正在尝试做这个(3)重新分区联接的预处理,如下所述:link
hmmo2u0o1#
你为什么要这么做?hadoop使用的数据局部性原则为您做到了这一点。它不会移动数据,它会移动程序。这来自关于hadoop的wikipedia页面:jobtracker计划将作业Map/减少到具有数据位置意识的TaskTracker。例如,如果节点a包含数据(x,y,z),节点b包含数据(a,b,c)。jobtracker将安排节点b在(a,b,c)上执行map/reduce任务,而节点a将安排在(x,y,z)上执行map/reduce任务hadoop文档本身解释了将计算移到数据而不是相反方向的原因:“移动计算比移动数据便宜”应用程序请求的计算如果在其操作的数据附近执行,则效率要高得多。当数据集的大小非常大时尤其如此。这样可以最大限度地减少网络拥塞并提高系统的整体吞吐量。我们的假设是,将计算迁移到更靠近数据所在位置的位置通常比将数据移动到应用程序运行的位置要好。hdfs为应用程序提供接口,使它们自己更接近数据所在的位置。
tsm1rwdh2#
hadoop中的distributedcache特性可以用来分发完成作业所需的边数据或辅助数据。这里(1,2)是一些有趣的文章。
2条答案
按热度按时间hmmo2u0o1#
你为什么要这么做?hadoop使用的数据局部性原则为您做到了这一点。它不会移动数据,它会移动程序。
这来自关于hadoop的wikipedia页面:
jobtracker计划将作业Map/减少到具有数据位置意识的TaskTracker。例如,如果节点a包含数据(x,y,z),节点b包含数据(a,b,c)。jobtracker将安排节点b在(a,b,c)上执行map/reduce任务,而节点a将安排在(x,y,z)上执行map/reduce任务
hadoop文档本身解释了将计算移到数据而不是相反方向的原因:
“移动计算比移动数据便宜”应用程序请求的计算如果在其操作的数据附近执行,则效率要高得多。当数据集的大小非常大时尤其如此。这样可以最大限度地减少网络拥塞并提高系统的整体吞吐量。我们的假设是,将计算迁移到更靠近数据所在位置的位置通常比将数据移动到应用程序运行的位置要好。hdfs为应用程序提供接口,使它们自己更接近数据所在的位置。
tsm1rwdh2#
hadoop中的distributedcache特性可以用来分发完成作业所需的边数据或辅助数据。这里(1,2)是一些有趣的文章。