1. 程式人生 > >大資料Hadoop學習筆記(四)

大資料Hadoop學習筆記(四)

MapReduce執行過程

========

  • step1 :
    • input
      • InputFormat
        • 讀取資料
        • 轉換成<key, value>
      • FileInputFormat
        • TextInputFormat
  • step 2:
    • map
      • ModuleMapper
      • map(KEYIN , VALUEIN, KEYOUT, VALUEOUT)
        • 預設情況下——>KEYIN :LongWritable VALUEIN : TEXT
  • step 3:
    • shuffle
    • proceess
      • map,output<key, value>
      • 輸出output一開始放在memory記憶體緩衝區
      • 記憶體滿了之後通過spill,溢寫到磁碟中,很多檔案。寫的過程中有兩種操作:
        • 分割槽parttition,基於hash分割槽
        • 排序sort
      • 輸出之後,磁碟存在很多小檔案
        • 將小檔案合併merge
        • 排序
        • 形成一個大檔案——》在map task執行的機器的本地磁碟
          -------------------------------- map結束 ---------------------------------------------
      • reduce任務啟動,會到map task執行的機器的本地磁碟上,拷貝要處理的資料
      • 合併。排序
      • 分組group:將相同的key的value放在一起
        -MAP-01
        <hadoop,1>
        ——————<hadoop,2>------->combiner在map端合併key
        <hadoop,1>
        <yarn,1>
        <hive,1>
        -MAP-02
        -MAP-03
        -reduce-01
        a-zA-Z
    • reduce-02
      other

總結shuffle過程:

  • 分割槽partition
  • 排序sort
  • 拷貝copy——使用者無法干預
  • 分組group
  • 壓縮compress——可設定
  • 合併 combiner map任務端的reduce——可設定
  • step 4:
    • reduce:
      • reduce(KEYIN, VALUEIN,KEYOUT,VALUEOUT)
      • map輸出的<key, value>資料型別與reduce輸入的<key, value>資料型別一致
  • step 5:
    • output
      • OutPutFormat
    • FileOutputFormat
      • TextOutputFormat
        • 每個<key, value>對,輸出一行,key和value之間用\t分隔,預設呼叫key和value的toString()方法
        • 在這裡插入圖片描述

MapReduce調優

  • reduce task 數量。設定的兩種方法:
    • mapreduce.job.reduces
    • job.setNumReduceTasks(1);
  • map task 輸出壓縮
    • 在這裡插入圖片描述
  • shuffle 引數
    • 在這裡插入圖片描述