程序执行流程(一):提交Job到Yarn集群或本地过程

1、获取配置文件,并创建job,提交到集群如:

Configuration conf = getConf();
conf.set("fs.defaultFS", "hdfs://192.168.30.150:8020");

String jobName = getClass().getSimpleName();

Job job = Job.getInstance(conf, jobName);
job.setJarByClass(TestMapReduce.class);
job.setMapperClass(TestMapper.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
job.setNumReduceTasks(0);

FileInputFormat.addInputPath(job, new Path(inputPath));
FileOutputFormat.setOutputPath(job, new Path(outputPath));

job.waitForCompletion(true);

当执行waitForCompletion(true)之后hadoop是如何将任务提交到集群上的呢?以下步骤都是在客户端执行:

1、获取资源提交路径

本地路径为:file://....../.staging
yarn环境为:hfds://....../.staging

    和JobId拼接成一个Job资源提交路径如:

hfds://....../.staging/jobid

2、调用FileInputFormat.getSplits()获取切片规划List<FileSplit>,并序列化为文件job.split,拷贝到job资源提交路径中去。

3、将job相关参数写成一个文件job.xml,拷贝到job资源提交路径中去。

4、获取job的jar包,拷贝到job资源提交路径中去。就是上面代码中的:

job.setJarByClass(TestMapReduce.class);
/**
   * Set the job's jar file by finding an example class location.
   * 
   * @param cls the example class.
   */
  public void setJarByClass(Class cls) {
    String jar = ClassUtil.findContainingJar(cls);
    if (jar != null) {
      setJar(jar);
    }   
  }

意思是在class文件的路径下获取job的jar包。

5、接下来就是Yarn或本地程序如何执行程序了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值