MapReduce之Job提交流程

@app

1. 準備階段

運行Job.waitForCompletion(),先使用JobSubmitter提交Job,在提交以前,會在Job的做業目錄中生成如下文件:
job.split:當前Job的切片信息,有幾個切片對象
job.splitmetainfo:切片對象的屬性信息
job.xml:job全部的屬性配置線程

2. 提交階段

本地模式
LocalJobRunner進行提交,若是是HDFS,使用了yarn,則是YARNJobRunner
建立一個LocalJobRunner.Job()
job啓動:Job.start()code

Map階段xml

  • 採用線程池提交多個MapTaskRunable線程
  • 每一個MapTaskRunable線程上,實例化一個MapTask對象
  • 每一個MapTask對象,最終實例化一個Mapper
  • Mapper.run()
  • 線程運行結束,會在線程的做業目錄中生成 file.out文件,保存MapTask輸出的全部的key-value

階段定義
若是有ReduceTask,MapTask運行期間,分爲 map(67%)---sort(33%) 兩部分
若是沒有ReduceTask,MapTask運行期間,只有map(100%)
map: 使用RecordReader將切片中的數據讀入到Mapper.map(),直至寫出:context.write(key,value)對象

Reduce階段blog

  • 採用線程池提交多個ReduceTaskRunable線程
  • 每一個ReduceTaskRunable線程上,實例化一個ReduceTask對象
  • 每一個ReduceTask對象,實例化一個Reducer
  • reducer.run()
  • 線程運行結束,會在輸出目錄中生成part-r-000x文件,保存ReduceTask輸出的全部的key-value,即最後結果

階段定義排序

  • copy:使用shuffle線程拷貝MapTask指定分區的數據
  • sort:將拷貝的全部的分區的數據彙總後,排序
  • reduce:對排好序的數據,進行合併

相關文章
相關標籤/搜索