Hadoop 提交任務執行流程總結
阿新 • • 發佈:2019-01-08
用流水線可表示任務執行流程如下:
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對輸出進行記錄這一過程中系統引數設定如下:
點選(此處)摺疊或開啟
-
job.setJarByClass(
-
job.setMapperClass(UniMapper.class);//設定map類
-
job.setCombinerClass(UniReduce.class);//設定reduce類
-
job.setReducerClass(UniReduce.class);//設定combine類
-
job.setOutputKeyClass(Text.class);//設定程式輸出k型別
-
job.setOutputValueClass(Text.class);//設定任務輸出v型別
-
FileInputFormat.addInputPath(job, new Path(args[0]));//輸入路徑
- FileOutputFormat.setOutputPath(job, new Path(args[1]));//輸出路徑