Hadoop - “代码移动靠近数据进行计算”

时间:2012-07-22 18:04:21

标签: hadoop mapreduce

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

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

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

  3. 由于

2 个答案:

答案 0 :(得分:3)

  1. Hadoop将MR job的jar放到HDFS--它的分布式文件系统。需要它的任务跟踪器将从那里获取它。因此,它分发到某些节点,然后由实际需要它们的节点按需加载。通常这需要意味着节点将处理本地数据。
  2. Hadoop集群与作业相关的“无状态”。每次将作业视为新内容时,不使用上一作业的“副作用”。
  3. 实际上,当要在大型集群上处理一些少量文件(或精确的拆分)时,优化将jar发送到数据确实驻留的少数主机可能会在一定程度上减少作业延迟。我不知道这样的优化是否有计划。

答案 1 :(得分:2)

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

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

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