1. 程式人生 > >Mapper與Reducer淺析

Mapper與Reducer淺析

映射 mapred 處理 reduce nbsp 階段 tco 單獨 淺析

一、 Mapper

Mapper接口負責數據處理階段,它采用的形式為Mapper<K1,V1,K2,V2>Java泛型,這裏鍵類和值類分別實現WritableComparable和Writable接口。

Mapper只有一個方法—map,用於處理一個單獨的鍵、值對。

Void map(K1key,V1 value,OutputCollector<K2,V2> output,Reporter reporter) throwsIOException該函數處理一個給定的鍵/值對(K1,V1),生成一個鍵/值對(K2,V2)的列表(該列表也可能為空),OutputCollector接收這個映射過程的輸出,Reportor可提供對Mapper相關附加信息的記錄,形成任務進度。

Mapper中包含的兩個主要方法:

1、 void configure(JobConfjob) 該函數提取XML配置文件或者應用程序主類中的參數,在數據處理前調用。

2、 void close(),map任務結束前的最後一個操作,該函數完成所有的收尾工作,如:關閉數據庫連接、打開文件等。

二、 Reducer

Reduce的實現和mapper一樣必須首先在MapReduce基類上擴展,允許配置和清理,還必須實現Reducer接口,使其具有如下的單一方法:

Void reduce(K2key,Iterator<V2> values,OutputCollector<K3,V3> output,Reporterreporter) throwsIOException

當reducer任務接收來自各個mapper的輸出時,它按照鍵/值對中鍵對輸入數據進行排序,並將相同鍵的值歸並。然後調用reduce()函數,並通過叠代處理那些與指定鍵相關聯的值,生成一個(可能為空的)列表(K3,V3).OutputCollector 接收reduce階段的輸出,並寫入輸出文件,Reporter可提供reducer相關的附加信息的記錄,形成任務進度。

Partitioner:重定向Mapper輸出(map和reduce兩個階段之間極其重要的步驟)。

Mapper與Reducer淺析