1. 程式人生 > >Hadoop 對MapReduce的理解

Hadoop 對MapReduce的理解

客戶端 rake ado 發送 class 拷貝 客戶 ack art

  • 對MapReduce的理解
    1. 客戶端啟動一個作業
    2. 向JobTraker請求一個JobId
    3. 將資源文件復制到HDFS上,包括Jar文件,配置文件,輸入劃分信息等
    4. 接收作業後,進入作業隊列,根據輸入劃分信息為每個劃分創建一個map任務,並將map任務分配給TaskTracker來執行(運算移動,數據不移動)分配Reduce任務時,不考慮數據本地化
    5. TaskTracker每隔一段時間向JobTracker發送一個心跳, 告訴JobTracker它仍在運行,同時心跳中還帶有很多信息,比如任務進度

  • Map端
    1. 輸入分片(默認64M)進入Map,輸出則暫且放到緩存中,緩沖區快要溢出時,會在本地創建一個溢出文件
    2. Partition(hash)和分區的內部排序,每個分區對應一個reduce任務
    3. 合並這些溢出文件
      • 減少每次寫入磁盤的數據量
      • 減少下一階段網絡傳輸的數據量
    4. 將分區中的數據拷貝給reduce任務(map-TaskTracker-JobTracker)

  • Reduce端
    1. 接收到每個map傳輸來的有效數據(有序),超過了緩沖區,就寫入到磁盤中
    2. 將溢出文件不斷合並成一個更大的有序文件
    3. 最後一次合並的數據,不輸出到磁盤,直接輸出到reduce函數中

Hadoop 對MapReduce的理解