我只是想澄清这句话“代码在数据附近移动以进行计算”,
这是否意味着开发人员编写的所有 java MR 都部署到集群中的所有服务器上?
如果 1 为真,如果有人更改了 MR 程序,它是如何分发到所有服务器的?
谢谢
实际上,当要在大型集群上处理少量文件(或准确地说是拆分)时,优化仅将 jar 发送到数据确实驻留的少数主机可能会在一定程度上减少作业延迟。我不知道是否计划了这样的优化。
在 hadoop 集群中,您使用相同的节点进行数据和计算。这意味着您的 hdfs 数据节点设置在任务跟踪器用于计算的同一集群上。因此,现在当您执行 MR 作业时,作业跟踪器会查看您的数据的存储位置。而在其他计算模型中,数据不存储在同一个集群中,您可能必须在某个计算节点上进行计算时移动数据。
开始工作后,所有地图功能都会拆分您的输入文件。执行这些映射函数,以便输入文件的拆分更接近它们,或者换句话说,在同一个机架中。这就是我们所说的计算更接近数据的意思。
因此,为了澄清您的问题,每次运行 MR 作业时,其代码都会复制到所有节点。因此,如果我们更改代码,则会将新代码复制到所有节点。