数据局部性在 Hadoop 中到底意味着什么?

What exactly does Data Locality mean in Hadoop?

许多 Hadoop 教程站点(即 https://techvidvan.com/tutorials/data-locality-in-hadoop-mapreduce/)定义的数据局部性指出:"Data locality in Hadoop is the process of moving the computation close to where the actual data resides instead of moving large data to computation. This minimizes overall network congestion."

我可以理解让数据所在的节点处理这些数据的计算,而不是四处移动数据,这样会更高效。但是,"moving the computation close to where the actual data resides"是什么意思呢?这是否意味着如果数据位于德国的服务器中,最好使用法国的服务器对这些数据进行计算,而不是使用新加坡的服务器进行计算,因为法国比德国更接近德国而不是新加坡?

人们通常在不同的范围内谈论这个问题,尤其是在 Hadoop 环境中。

假设你有一个由 5 个节点组成的集群,你在那里存储了一个文件并需要对其进行计算。

对于数据局部性,您尝试在存储数据的节点(而不是例如具有可用计算资源的第一个节点)上进行计算。

这样可以减少网络负载。


很高兴认识到在许多新的基础设施中网络不是瓶颈,因此您会不断听到更多有关计算和存储解耦的信息。

我 +1 Dennis Jaheruddin 的回答,只是想补充一点——当您检查工作计数器时,例如在工作历史 UI 中,您实际上可以在 MR 中看到不同的位置级别。

HDFS 和 YARN 是 rack-aware,因此它不仅仅是二进制的相同或其他节点:在上面的屏幕中,Data-local 表示任务是 运行 本地机器包含实际数据; Rack-local -- 数据不在执行任务的节点 运行 本地,需要复制,但仍在同一个机架上;最后是 Other local 情况——数据在本地不可用,也不在同一机架上,因此必须通过两个交换机将其复制到 运行 计算的节点。