Hadoop 如果数据不是本地的,任务跟踪器如何从另一个节点获取映射任务的数据?

Hadoop 如果数据不是本地的,任务跟踪器如何从另一个节点获取映射任务的数据?,hadoop,Hadoop,如果数据不是本地的,任务跟踪器如何从另一个节点获取映射任务的数据 它是直接与包含数据的机器的数据节点通信,还是与自己的数据节点通信,后者又与另一个数据节点通信 谢谢, Suresh.任务跟踪器本身不获取数据-它启动(或重用)JVM来运行映射任务。映射任务使用DFS文件系统客户端查询名称节点以查找要处理的文件的块位置。然后,客户机连接到数据节点,其中一个块被复制以实际获取文件内容(作为流) 如果您想更深入地研究,源代码是一个很好的了解的地方-请查看DFSClient和内部类DFSInputStre

如果数据不是本地的,任务跟踪器如何从另一个节点获取映射任务的数据

它是直接与包含数据的机器的数据节点通信,还是与自己的数据节点通信,后者又与另一个数据节点通信

谢谢,
Suresh.

任务跟踪器本身不获取数据-它启动(或重用)JVM来运行映射任务。映射任务使用DFS文件系统客户端查询名称节点以查找要处理的文件的块位置。然后,客户机连接到数据节点,其中一个块被复制以实际获取文件内容(作为流)

如果您想更深入地研究,源代码是一个很好的了解的地方-请查看DFSClient和内部类DFSInputStream(尤其是bestNode方法)

    • 课程从1443行开始
    • openInfo()
      method@line 1494
    • choose()
      method@1800

谢谢你,克里斯。因此,在将任务分配给任务跟踪器时,作业跟踪器只会指示要执行的作业id和输入拆分(它是否有id?)。它不会说在哪里可以找到那个裂缝。映射任务有责任找到它,而且它很可能会在同一个节点中找到它(通过联系名称节点),因为作业调度器主要是这样分配任务的。这种理解正确吗?我来看看代码。您还可以指出一些讨论内部结构的书籍或在线资源吗?任务跟踪程序的任务分配由TaskScheduler.assignTasks方法决定