请问一下,基类 BaseMR 里边为什么要用 abstract 的 getJob 而不直接调用 getInstance 呢?

问答 LUNLI ⋅ 于 2020-07-22 20:23:08 ⋅ 最后回复由 青牛 2020-07-23 22:42:39 ⋅ 3252 阅读

BaseMR里边public abstract Job getJob(Configuration conf) throws Exception;
然后它实现的时候就是直接调用
Job job = Job.getInstance(conf,getJobNameWithTaskID());

当时可以直接就调用这个函数吗?还是说这是个设计的原则 但其实效果是一样的

谢谢!

本帖已被设为精华帖!
本帖由 青牛 于 4年前 加精
成为第一个点赞的人吧 :bowtie:
回复数量: 5
  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2020-07-22 21:43:30

    是因为写mr有3种方法:1、main方法里面直接写。2、用ToolRunnr加上Configured。3、使用任务工作链。
    有这么多的方式所以团队开发不统一,那为了统一mr编写规则,所以在定义了BaseMR并且里面定义了抽象方法
    public abstract Job getJob(Configuration conf)
    可以在里面调用Job job = Job.getInstance(conf,getJobNameWithTaskID()); 生成任务的Job

    当然如果你想自由不规范你可以在任意地方,比如main方法中调用Job job = Job.getInstance(conf,getJobNameWithTaskID());生成你的Job。但是别人也像你一样随机3选1,那你们团队以后看彼此代码的时候是不是心里都在骂娘。

  • LUNLI
    2020-07-22 22:08:58

    嗯嗯 明白了 谢谢

  • 苏牛
    2020-07-23 09:18:14

    每个job的设置都不一样没办法进行公共设置

  • LUNLI
    2020-07-23 18:57:55

    @苏牛

    Job.getInstance(conf,getJobNameWithTaskID())
    对distinct,max和wordcount,getJobNameWithTaskID不是会得到不一样的返回值吗,只要调用这个函数 就会得到不同的返回值,为什么要用抽象方法才能确保得到不同的返回值呢

  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2020-07-23 22:42:39

    @LUNLI 每个任务得到自己的,每个任务的getJobNameWithTaskID是不一样的

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter