hadoop作业执行流程及代码简略解读之二JobClient

来源:互联网 发布:服务器数据丢失 编辑:程序博客网 时间:2024/06/02 06:03

4.Jobclient
        4.0 配置一个作业
         在编写MapReduce程序时通常是上是这样写的:
         Job job=new Job(conf,"ClosedDataCube");
         //指定作业代码

         job.setJarByClass(ClosedDataCube.class);
         //设置map

         job.setMapperClass(cubeMapper.class);
         job.setMapOutputKeyClass(Text.class);
         job.setMapOutputValueClass(Text.class);
         //设置combiner
         job.setCombinerClass(cubeCombiner.class);
         //设置reduce
         job.setReducerClass(cubeReducer.class);
         job.setOutputKeyClass(Text.class);
         job.setOutputValueClass(Text.class);
         //设置输入输出
         FileInputFormat.addInputPath(job, new Path(args[0]));
         FileOutputFormat.setOutputPath(job,new Path(args[1]));
 
         System.exit(job.waitForCompletion(true)?1:0);
  类Job:以作业提交者得角看作业的状况。允许用户配置作业、提交作业、控制执行、查询状态。所有的set方法在提交作业时开始执行。
4.1 提交作业
        1.job.waitForCompletion(true):
         提交作业并等待其执行结束。在这里主要通过submit()方法提交一个作业。
        2.submit()方法的流程:
        RunningJob info=jobClient.submitJobInternal(conf); 通过JobClient提交一个作业。同时返回一个RunningJob 对象用于用户查询这个作业的相信信息。RunningJob是一个接口只有一个实现是JobClient中的NewWorkedJob描述一个job的详细信息。此时 job的状态为运行状态。
       3.JobClient.submitJobInternal(conf)
       JobClient是用户与JobTracker联系的一个基本的接口。提供提交作业的基本接口、跟踪作业、获得作业的运行状态信息等。
              0.创建作业的JobID并提交三个文件
              job.xml: 作业配置,例如Mapper, Combiner, Reducer的类型,输入输出格式的类型等。
              job.jar: jar包,里面包含了执行此任务需要的各种类,比如 Mapper,Reducer等实现。
              job.split: 文件分块的相关信息,比如有数据分多少个块,块的大小(默认64m)等。
             1.检查作业的输入、输出
             2.计算map数目。即计算输入分片的数目。通过InputFormat的getSplits(job)方法获得作业的split并将split序列化封装为RawSplit。返回split数目,也即代表有多个分片有多少个map。
             3.向JobTracker的fs中写入job文件
             4.jobSubmitClient.submitJob(jobId)真正的提交一个作业。并返回作业的状态对象句柄。
 4.jobSubmitClient.submitJob(jobId)
         jobSubmitClient是JobSubmissionProtocol的接口的对象。这个接口有两个实现:LocalJobRunner(conf)当mapred-site.xml中的mapred.job.tracker值为local是为此对象。表示在单机上执行;如果为一个地址的话则是 JobTracker的对象,表示分布式执 行。这里讲JobTracker的处理流程。
         jobFile的提交过程是通过RPC(远程进程调用)模块来实现的。大致过程是,JobClient类中通过RPC实现的Proxy接口调用创建了JobTracker对象。与master取得联系。并调用的submitJob()方法提交。JobTracker创建job成功后会给JobClient传回一个JobStatus对象 用于记录job的状态信息,如执行时间、Map和Reduce任务完成的比例等。JobClient会根据这个JobStatus对象创建一个NetworkedJob的RunningJob对象,用于定时从JobTracker获得执行过程的统计数据来监控并打印到用户的控制台。

原创粉丝点击