在“Hadoop-权威指南”中,它说->
运行该作业的客户端通过调用getSplits()计算该作业的拆分,然后将其发送到jobtracker,该作业使用其存储位置来计划 map task 以在任务跟踪器上对其进行处理。
public abstract class InputSplit {
public abstract long getLength() throws IOException, InterruptedException;
public abstract String[] getLocations() throws IOException,
}
我们知道getLocations()返回一个主机名数组。
问题1:客户端如何知道要返回的主机名。这不是求职者的工作吗?
问题2:2个不同的InputSplit对象可以返回相同的主机名吗?如何确定主机名。是谁啊
我感觉客户端与namenode联系以获取文件的所有主机名(包括副本),进行一些数学运算以得出为每个inputsplit设置的位置。是真的吗
最佳答案
问:客户端如何知道要返回的主机名。这不是求职者的工作吗?
答:输入拆分由作业配置中使用的输入格式创建。在创建拆分的逻辑集的过程中,它会到达“名称节点”,以询问构成拆分的块的位置。作业跟踪器的职责是确保其尝试运行基于输入拆分中信息的,考虑数据局部性的 map task 。
问题2:2个不同的InputSplit对象可以返回相同的主机名吗?如何确定主机名。是谁啊
答:当然。每个输入拆分都有自己的公式来计算拆分。请记住,输入拆分不必具有相同的块大小。
希望这可以帮助。
关于java - 如何在输入拆分中计算位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18632203/