当前位置: 代码迷 >> 综合 >> 0916 MR作业提交流程 Yarn-HA WC代码 作业提交源码
  详细解决方案

0916 MR作业提交流程 Yarn-HA WC代码 作业提交源码

热度:76   发布时间:2023-12-21 23:06:51.0

1 作业提交流程

客户端提交MR作业   Yarn的资源管理器Resource Manager 协调集群计算资源的分配  Yarn的节点管理器 NodeManager 启动并监控集群中计算容器  MapReduce中的Application Master 协调MR作业中的任务运行 ApplicationMaster和MR运行在容器中,容器由resourceManager调度 由NodeManager管理 HDFS在组件内共享作业数据  Job对象的submit方法创建了一个内部的JobSubmitter实例并调用该实例的submitJobInternal方法。一旦提交了作业,waitForCompletion方法每秒钟轮询作业的执行进度,如果进度发生了变化,则向控制台报告进度。当作业成功完成,展示作业计数器的数据。否则展示作业失败的错误日志信息。

客服端提交作业的过程   1 先申请一个ApplicationID 给MR用 2 检查输入输出路径 不能没有或者存在 3 计算输入的切片 4 拷贝执行作业需要的资源 (10份)在HDFS上  资源包括(jar包 配置文件 计算好的输入切片)5 调用resourcemanager的submitApplication方法提交作业

Yarn为请求分配一个容器 resourceManager 通过容器所在节点上的nodemanager在该容器上启动一个applicationMaster进程   applicationMaster从hdfs抽取切片为每一个切片创建一个map任务 以及一定数量的reduce任务对象 applicationMaster会为作业中所有任务向resourceManager请求容器  appmaster从hdfs抽取客户端上传的信息,计算好map对象和reduce对象,首先向resourcemanager为map任务申请资源,当map任务完成5%之后为reduce任务申请资源   一旦resourcemanager在一个节点上的一个容器中为一个任务分配了资源,application master与nodemanager通信,启动容器  在它可以开始任务的执行之前,它要本地化任务需要的资源  最后,它开始运行map任务或者reduce任务

2 搭建HA 

更改 mapred-site.xml  yarn-site.xml

3 WC代码

创建Configuration 的配置 Job.getIntance(conf) 任务加载配置 之后 设置job   设置文件的输入输出路径

FileInputFormat.addInputPath(job,new Path(args[0]));
FileOutputFormat.setOutputPath(job,new Path(args[1]));

最后通过job.waitForCompketion(true) 提交作业

4 源码

先是job上的JobContextImpl上的MRJobConfig (默认常量变量的类) 所有的配置都会变成xml的文件 有些配置也可以在conf中设置  conf.set(MRJobConfig.REDUCE_CLASS_ATTR,"com.bjsxt.mr.wc.WCReduce") 在MRJobConfig中有很多默认值 cpu数量 需要内存等 

job.class ->waitForCompletion()->submit()->submitJobInternal()

                                                   ->monitorAndPrintJob()

int completionPollIntervalMillis = Job.getCompletionPollInterval(cluster.getConf()); 每秒轮训作业执行进度 submitJobInternal()int maps = writeSplits(job, submitJobDir);     FileInputFormat getSplits()计算切片 设置最大最小值