0

在“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 对象能否返回相同的主机名?主机名是如何决定的。谁这样做?

我觉得客户端联系名称节点以获取文件的所有主机名(包括副本),进行一些数学运算以到达为每个输入拆分设置的位置。这是真的吗?

4

1 回答 1

0

Q 客户端如何知道要返回哪些主机名。这不是jobtracker的工作吗?

A. 输入拆分由作业配置中使用的输入格式创建。在创建一组逻辑拆分的过程中,它会联系名称节点,询问形成拆分的块的位置。作业跟踪器的职责是确保它根据 InputSplit 中的信息尝试运行考虑数据局部性的地图任务。

问题 2:2 个不同的 InputSplit 对象能否返回相同的主机名?主机名是如何决定的。谁这样做?

答:绝对。每个输入 splits 都有自己的公式来计算 splits 。请记住,输入拆分不必与块的大小相同。

希望这可以帮助。

于 2013-09-06T06:58:57.363 回答