假设 HDFS 的复制因子是 3,那么对于一个 map 任务,有 3 个节点保存其输入数据。map 任务是从所有 3 个节点并行读取还是随机选择其中一个?
我做了一些实验,我将一个数据节点设置为具有非常低的带宽并获得一些非常慢的地图任务,所以我猜地图任务不会从所有可用的数据节点并行读取,对吗?
谢谢您的帮助!
映射器任务将在任务跟踪器节点之一上执行,并将从数据节点之一(本地或远程)读取块。
如果您的复制因子为 3,则集群中有三个节点保存特定地图任务的输入数据。
Job Tracker 将仅将映射任务分配给这三个节点中的一个,因此它只从该节点读取数据。
Hadoop 有一个称为推测执行的功能。在推测执行中,如果 Job Tracker 发现其中一个 map 任务的完成时间过长,它将在另一个数据可用的节点上启动相同的 map 任务。发送到 reducer 的数据取自首先完成的 map 任务。在这种情况下,您将有 2 个地图任务读取相同的输入数据,但在不同的节点上。