MapReduce的整體流程
    1、待處理資料
    2、提交客戶端submit()
    3、提交資訊切片----hadoop jar wc.jar
    4、計算出maptask數量----(nodemanger開闢maptask)
    5、使用TextInputFormat讀待處理資料----RecordReader
    6、context.write()原始碼中用InputOutputContext向環形緩衝區寫資料----預設分割槽和排序    預設為100M,超過80%發生溢寫
    7、歸併排序
    8、下載到reduceTask本地磁碟
    9、合併檔案,歸併排序
    10、一次讀取一組
    11、預設TextOutputFormat----RecordWrite


shuffle機制(map之後,reduce之前)
    1、寫入資料到喚醒緩衝區,預設100M,超過80%,發生溢寫
    2、第一次溢寫,
    3、進行分割槽
    4、進行排序
    5、合併,----Combiner可選操作,合併是區與裡面發生排序就會觸發
    6、歸併----合併是每個區內的合併,歸併是區與區之間的合併
    7、輸出,context()寫磁碟
    8、拷貝
    9、記憶體不夠益處到磁碟
    10、歸併排序
    11、按照相同的key分組