将hadoop jar命令将jar文件复制到所有从属节点并开始执行或如何工作以及由谁执行此操作?工作跟踪器或Namenode? p>
答案 0 :(得分:4)
" hadoop jar"命令告诉hadoop通过提供jarfile,输入路径,输出路径来执行集群中的作业。 jar文件包含Job配置,以及所有Map和Reduce代码。
步骤:
作业客户端向JobTracker(JT)提交作业。在后台,它将包含Config,Mapper和Reducer代码,输入和输出路径信息的二进制文件复制到靠近任务跟踪器(TT)的集中区域中的HDFS。一旦TT需要使用该代码,他们只需在datanode上本地下载它,这样当Map和Reduce任务站起来时,他们就会使用该代码在本地数据上运行。
JT在NameNode中查询包含数据的数据位置和数据节点名称。
通过这些信息,JT与TT进行对话,并通过考虑最接近数据的TTS创建执行计划,如果他们有可用的执行槽。如果不是,那么它适用于机架位置,并且发现同一机架中的任何TT都有可用的插槽。如果仍然找不到,那么在任何机架/任何地方找到TT。
根据执行计划,JT向TT提交工作。 TT现在支持Map和Reduce Tasks并执行数据。
TT会定期向JT报告进度和心跳(默认值为每5秒)。每个Map和Reduce任务都通过TT向JT报告其进度/完成/错误。即Mapper和Reducer任务向JT报告TT和TT报告。如果MR任务死亡,那么TT会将此报告给JT,JT会旋转其他MR任务来处理错误。
一旦所有地图制作者完成了他们的任务,JT发出TT信号告诉Reducers执行他们的reducer执行(即运行reduce()方法)
完成所有Mapper和Reducers并写入最终输出后,JT会将其状态更新为SUCCESS并通知客户端。