在最近关于分布式处理和流媒体的讨论中,我遇到了“代码转移到数据”的概念。请有人帮忙解释一下。此短语的引用是MapReduceWay。
就Hadoop而言,it's stated in a question但仍无法以技术无关的方式解释原理。
答案 0 :(得分:6)
基本思想很简单:如果代码和数据在不同的机器上,则必须先将其中一台机器移动到另一台机器上,然后才能对数据执行代码。如果代码小于数据,最好将代码发送到持有数据的机器而不是相反,如果所有机器都同样快速且代码兼容。 [可以说你可以根据需要发送源码和JIT编译]。
在大数据世界中,代码几乎总是小于数据。
在许多超级计算机上,数据被划分为多个节点,并且整个应用程序的所有代码都在所有节点上复制,正是因为整个应用程序与本地存储的数据相比都很小。然后,任何节点都可以运行应用于它所拥有的数据的程序部分。无需按需发送代码。
答案 1 :(得分:1)
我还碰到了句子“ 移动计算比移动数据便宜”(摘自Apache Hadoop documentation),经过阅读后,我认为这是指的原理数据位置。
数据局部性是一种任务调度策略,旨在基于以下事实来优化性能:基于跨网络移动数据的成本很高,因此,当计算/数据节点空闲时选择优先处理哪个任务时,将优先考虑任务将对自由节点或其附近的数据进行操作。
(来自Delay Scheduling: A Simple Technique for Achieving Locality and Fairness in Cluster Scheduling, Zaharia et al., 2010的)对此进行了清楚的解释:
Hadoop的默认调度程序按FIFO顺序运行作业,具有五个优先级。当调度程序收到表示地图的心跳信号 或reduce插槽是空闲的,它按优先级顺序扫描作业并提交时间以查找具有所需类型任务的作业。对于地图, Hadoop使用Google MapReduce [18]中的位置优化:选择作业后,调度程序会贪婪地选择其中的地图任务 数据最接近从服务器的作业(如果可能,在同一节点上,否则在同一机架上,或者最后在远程机架上)。
请注意,Hadoop在节点之间复制数据这一事实增加了任务的合理调度(复制程度越高,任务在下一个空闲节点上拥有数据并因此被选择在下一个运行的可能性就越高)。