在“Hadoop - 权威指南”中,它说 -->
运行作业的客户端通过调用 getSplits() 计算作业的拆分,然后将它们发送到作业跟踪器,作业跟踪器使用它们的存储位置来安排地图任务以在任务跟踪器上处理它们。
public abstract class InputSplit {
public abstract long getLength() throws IOException, InterruptedException;
public abstract String[] getLocations() throws IOException,
}
我们知道 getLocations() 返回一个主机名数组。
问题 1:客户端如何知道要返回哪些主机名。这不是jobtracker的工作吗?
问题 2:2 个不同的 InputSplit 对象能否返回相同的主机名?主机名是如何决定的。谁这样做?
我觉得客户端联系名称节点以获取文件的所有主机名(包括副本),进行一些数学运算以到达为每个输入拆分设置的位置。这是真的吗?