【发布时间】:2014-10-09 01:44:07
【问题描述】:
- 我们通过hadoop jar命令提交jar文件
- 命中主节点
hadoop jar 命令是否会将 jar 文件复制到所有从节点并开始执行,或者它是如何工作的,谁来做?作业跟踪器或 Namenode ?
【问题讨论】:
hadoop jar 命令是否会将 jar 文件复制到所有从节点并开始执行,或者它是如何工作的,谁来做?作业跟踪器或 Namenode ?
【问题讨论】:
“hadoop jar”命令告诉hadoop通过提供jarfile、输入路径、输出路径在集群中执行作业。 jar 文件包含作业配置以及所有 Map 和 Reduce 代码。
步骤:
作业客户端向 JobTracker (JT) 提交作业。在后台,它将包含 Config、Mapper 和 Reducer 代码、输入和输出路径信息的二进制文件复制到靠近 Task Trackers (TT) 的集中区域中的 HDFS。一旦 TT 需要使用该代码,他们只需将其下载到本地数据节点上,这样当 Map 和 Reduce 任务启动时,他们就可以使用该代码在本地数据上运行。
JT 向 NameNode 查询包含数据的数据位置和数据节点名称。
利用此信息,JT 与 TT 对话,并通过考虑最接近数据的 TTS(如果它们有可用的执行槽)来创建执行计划。如果它们不是,那么它会去机架位置并发现同一机架中的任何 TT 都有可用的插槽。如果仍然找不到,则在任何机架/任何位置查找 TT。
根据执行计划,JT 将工作提交给 TT。 TT 现在支持 Map 和 Reduce 任务并在数据上执行。
TT 定期向 JT 报告进度和心跳(默认每 5 秒)。每个 Map 和 Reduce 任务通过 TT 向 JT 报告他们的进度/完成/错误。即 Mapper 和 Reducer 任务向 TT 报告,TT 向 JT 报告。如果 MR 任务死亡,那么 TT 会将此情况报告给 JT,JT 会启动其他 MR 任务来处理错误。
一旦所有映射器都完成了他们的任务,JT 会向 TT 发出信号,告诉 Reducer 运行他们的 reducer 执行(即运行 reduce() 方法)
一旦所有 Mapper 和 Reducer 都完成并写入最终输出,JT 会将其状态更新为 SUCCESS 并通知客户端。
【讨论】: