在最近一次关于分布式处理和流的讨论中,我遇到了“代码移动到数据”的概念。有人能帮我解释一下吗。这个短语的参考是mapreduceway。在hadoop方面,它是在一个问题中陈述的,但是仍然不能以一种技术不可知的方式来解释这个原理。
fbcarpbf1#
基本思想很简单:如果代码和数据在不同的机器上,则必须将其中一台移到另一台机器上,然后才能对数据执行代码。如果代码小于数据,则最好将代码发送到保存数据的机器,而不是相反,如果所有机器速度相同且代码兼容[您可以根据需要发送源代码和jit编译]。在大数据的世界里,代码几乎总是比数据小。在许多超级计算机上,数据被划分到许多节点上,整个应用程序的所有代码都被复制到所有节点上,这正是因为整个应用程序甚至比本地存储的数据都小。然后,任何节点都可以运行应用于其所持有数据的程序部分。无需按需发送代码。
mwg9r5ms2#
我还遇到了一句话“移动计算比移动数据便宜”(来自apachehadoop文档),读了一段之后,我认为这是指数据局部性的原则。数据局部性是一种任务调度策略,其目的是基于在网络上移动数据代价高昂的观察结果来优化性能,因此当选择在计算/数据节点空闲时优先处理哪个任务时,将优先考虑将在空闲节点或其附近的数据上操作的任务。这(来自延迟调度:在集群调度中实现局部性和公平性的简单技术,zaharia et al.,2010)清楚地解释了这一点:hadoop的默认调度程序按fifo顺序运行作业,具有五个优先级。当调度器接收到一个心跳信号,指示mapor reduce插槽空闲时,它将按优先级和提交时间顺序扫描作业,以找到一个具有所需类型任务的作业。对于Map,hadoop使用了google的mapreduce[18]中的局部优化:在选择了一个作业之后,调度器贪婪地挑选作业中的Map任务,其中的数据最接近从机(如果可能,在同一节点上,否则在同一机架上,或者最后在远程机架上)。请注意,hadoop跨节点复制数据的事实增加了任务的公平调度(复制越高,任务在下一个空闲节点上拥有数据的概率就越高,因此被选中运行下一个节点)。
2条答案
按热度按时间fbcarpbf1#
基本思想很简单:如果代码和数据在不同的机器上,则必须将其中一台移到另一台机器上,然后才能对数据执行代码。如果代码小于数据,则最好将代码发送到保存数据的机器,而不是相反,如果所有机器速度相同且代码兼容[您可以根据需要发送源代码和jit编译]。
在大数据的世界里,代码几乎总是比数据小。
在许多超级计算机上,数据被划分到许多节点上,整个应用程序的所有代码都被复制到所有节点上,这正是因为整个应用程序甚至比本地存储的数据都小。然后,任何节点都可以运行应用于其所持有数据的程序部分。无需按需发送代码。
mwg9r5ms2#
我还遇到了一句话“移动计算比移动数据便宜”(来自apachehadoop文档),读了一段之后,我认为这是指数据局部性的原则。
数据局部性是一种任务调度策略,其目的是基于在网络上移动数据代价高昂的观察结果来优化性能,因此当选择在计算/数据节点空闲时优先处理哪个任务时,将优先考虑将在空闲节点或其附近的数据上操作的任务。
这(来自延迟调度:在集群调度中实现局部性和公平性的简单技术,zaharia et al.,2010)清楚地解释了这一点:
hadoop的默认调度程序按fifo顺序运行作业,具有五个优先级。当调度器接收到一个心跳信号,指示mapor reduce插槽空闲时,它将按优先级和提交时间顺序扫描作业,以找到一个具有所需类型任务的作业。对于Map,hadoop使用了google的mapreduce[18]中的局部优化:在选择了一个作业之后,调度器贪婪地挑选作业中的Map任务,其中的数据最接近从机(如果可能,在同一节点上,否则在同一机架上,或者最后在远程机架上)。
请注意,hadoop跨节点复制数据的事实增加了任务的公平调度(复制越高,任务在下一个空闲节点上拥有数据的概率就越高,因此被选中运行下一个节点)。