1. 程式人生 > >Hadoop 提交任務執行流程總結

Hadoop 提交任務執行流程總結

用流水線可表示任務執行流程如下:

input(k1,v1) -> map -> (k2,v2) -> combine -> shuffle(partitioner) -> sort -> (k2,v2) -> reduce -> (k3,v3) ->output

接著來段大白話,聊一聊:

一,input

(通過FileInputFormat設定),此步主要工作:驗證輸入形式,呼叫InputSplit決定map個數,並通過RecordReader用於輸入記錄;

二,map

(把輸入的(k1,v1)分割成n個(k2,v2)),此步主要工作: setup初始化map工作例如開啟檔案,map例如把一行分割成(word,1)的(k,v)形式,用於後面reduce詞頻統計,cleanup收尾map工作例如關閉檔案;

三,combine

此步主要工作:對map操作過後的(k2,v2),按鍵值進行歸併,也就是把key值相同的的value歸併成一個values_list,此步是在map端進行,但是僅僅做歸併操作,並沒有多餘的操作,目的是不讓資料太分散,減少資料傳輸的網路開銷;

四,shuffle

(這個詞,記了好幾次...也怪我記性差~_~!!)此處用partitioner就好記嘍,此步主要工作:對combine後的結果進行分割槽操作,使具有相關性的資料傳送到相同reduce節點上,避免具有相關性資料分散在不同reduce節點上,導致reduce計算過程中還得去訪問其他reduce節點,降低運算效率;

五,sort

此步主要操作:map處理過後的資料在進行reduce操作之前,進行排序操作,其過程為map過後,對分散儲存的資料進行快速排序,然後通過歸併排序把分散的資料存入一個大檔案;

六,reduce

對(k2,v2)進行操作,其中v2指value_list,例如詞頻統計對(value_list資料進行累加),同map包括(setup, reduce, cleanup)

七,output

(通過FileOutputFormat設定),此步主要把任務資料儲存起來,其中包括recordWriter對輸出進行記錄
這一過程中系統引數設定如下:

點選(此處)摺疊或開啟

  1. job.setJarByClass(
    Unique.class);//設定任務執行類
  2. job.setMapperClass(UniMapper.class);//設定map類
  3. job.setCombinerClass(UniReduce.class);//設定reduce類
  4. job.setReducerClass(UniReduce.class);//設定combine類
  5. job.setOutputKeyClass(Text.class);//設定程式輸出k型別
  6. job.setOutputValueClass(Text.class);//設定任務輸出v型別
  7. FileInputFormat.addInputPath(job, new Path(args[0]));//輸入路徑
  8. FileOutputFormat.setOutputPath(job, new Path(args[1]));//輸出路徑

參考連結:

http://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html