1

我只是想澄清这句话“代码在数据附近移动以进行计算”,

  1. 这是否意味着开发人员编写的所有 java MR 都部署到集群中的所有服务器上?

  2. 如果 1 为真,如果有人更改了 MR 程序,它是如何分发到所有服务器的?

谢谢

4

2 回答 2

3
  1. Hadoop 将 MR 作业的 jar 放入 HDFS - 它的分布式文件系统。需要它的任务跟踪器将从那里获取它。所以它分发到一些节点,然后由实际需要它们的节点按需加载。通常这需要意味着节点将处理本地数据。
  2. Hadoop 集群对于作业来说是“无状态的”。每次工作都被视为新事物,并且不使用先前工作的“副作用”。

实际上,当要在大型集群上处理少量文件(或准确地说是拆分)时,优化仅将 jar 发送到数据确实驻留的少数主机可能会在一定程度上减少作业延迟。我不知道是否计划了这样的优化。

于 2012-07-22T18:51:07.127 回答
2

在 hadoop 集群中,您使用相同的节点进行数据和计算。这意味着您的 hdfs 数据节点设置在任务跟踪器用于计算的同一集群上。因此,现在当您执行 MR 作业时,作业跟踪器会查看您的数据的存储位置。而在其他计算模型中,数据不存储在同一个集群中,您可能必须在某个计算节点上进行计算时移动数据。

开始工作后,所有地图功能都会拆分您的输入文件。执行这些映射函数,以便输入文件的拆分更接近它们,或者换句话说,在同一个机架中。这就是我们所说的计算更接近数据的意思。

因此,为了澄清您的问题,每次运行 MR 作业时,其代码都会复制到所有节点。因此,如果我们更改代码,则会将新代码复制到所有节点。

于 2012-07-24T16:59:24.220 回答