請問一下,基類 BaseMR 里邊為什么要用 abstract 的 getJob 而不直接調用 getInstance 呢?

問答 ? LUNLI ? 于 2020-07-22 20:23:08 ? 最后回復由 青牛 2020-07-23 22:42:39 ? 470 閱讀

BaseMR里邊public abstract Job getJob(Configuration conf) throws Exception;
然后它實現的時候就是直接調用
Job job = Job.getInstance(conf,getJobNameWithTaskID());

當時可以直接就調用這個函數嗎?還是說這是個設計的原則 但其實效果是一樣的

謝謝!

本帖已被設為精華帖!
本帖由 青牛 于 4月前 加精
成為第一個點贊的人吧 :bowtie:
回復數量: 5
  • 青牛 國內首批大數據從業者,就職于金山,擔任大數據團隊核心研發工程師
    ? 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不是會得到不一樣的返回值嗎,只要調用這個函數 就會得到不同的返回值,為什么要用抽象方法才能確保得到不同的返回值呢

  • 青牛 國內首批大數據從業者,就職于金山,擔任大數據團隊核心研發工程師
    ? 2020-07-23 22:42:39

    @LUNLI 每個任務得到自己的,每個任務的getJobNameWithTaskID是不一樣的

暫無評論~~
  • 請注意單詞拼寫,以及中英文排版,參考此頁
  • 支持 Markdown 格式, **粗體**、~~刪除線~~、`單行代碼`, 更多語法請見這里 Markdown 語法
  • 支持表情,可用Emoji的自動補全, 在輸入的時候只需要 ":" 就可以自動提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上傳圖片, 支持拖拽和剪切板黏貼上傳, 格式限制 - jpg, png, gif,教程
  • 發布框支持本地存儲功能,會在內容變更時保存,「提交」按鈕點擊時清空
Ctrl+Enter
上海麻将垃圾胡技巧 911423269347842891162168357133981790497885573265525685698311123882595249947627163578942639349506 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();