**:
1、map類
protected void map(object key, value value, context context)2、reducer類throws ioexception, interruptedexception
reducer類繼承了類庫中的reducer,原型為reducer,reduce類除了reduce方法不一樣外,其他跟map均一樣,功能也相同。其reduce方法為:
protected void reduce(text key, interablevalues, context context)3、mapreduce驅動throws ioexception, interruptedexception
}
簡單來說就是main函式中的**,一般情況下包括:
configuration conf = new configuration();其實這裡還包括乙個maprecude最小驅動即之呼叫minimapreducedriver類,//獲取輸入輸出檔案路徑
string otherargs = new genericoptionsparser(conf,args).getremainingargs();
if(otherargs.length != 2)
job job = new job(conf,"dedup");
job.setjarbyclass(dedup.class); //主類
job.setcombinerclass(reduce.class); //job合成類
job.setreducerclass(reduce.class); //reduce類
job.setoutputkeyclass(text.class); //設定job輸出資料的key類
job.setoutputvalueclass(text.class); //設定job輸出資料的value類
fileinputformat.addinputpath(job, new path(otherargs[0])); //檔案輸入
fileoutputformat.setoutputpath(job, new path(otherargs[1])); //檔案輸出
system.exit(job.waitforcompletion(true) ? 0 : 1);
}
job job = new job(conf,"dedup");4、inputformat介面job.setjarbyclass(dedup.class);
fileinputformat.addinputpath(job, new path(otherargs[0]));
fileoutputformat.setoutputpath(job, new path(otherargs[1]));
system.exit(job.waitforcompletion(true) ? 0 : 1);
inputformat類的層次結構如下所示。textinputformat是inputformat的預設實現方式,對輸入資料中沒有明確key-value時很有效,其返回的key表示這行資料的偏移量,value為行的內容。
5、inputsplit類
預設情況下,fileinputformat及其子類以64mb(建議split大小與此相同)為基數拆分檔案。通過以塊形式處理檔案,可以讓多個map任務並行地操作乙個檔案。對於大檔案,就會極大提公升效能。map的輸入是乙個個的輸入分片,即為inputsplits。
inputsplit的子類有filesplit和combinefilesplit。兩者均包含檔案路徑、分片開始位置、分片大小、儲存分片資料的host列表。但combinefilesplit是針對小檔案,其將很多小檔案包在乙個inputsplit內,這樣就能處理很多小檔案了。
針對某些檔案不可切分,則可通過兩種方式完成,第一種為將檔案最小分片大小設定為大於檔案大小,第二種方法為使用fileinputformat的子類,並過載issplitable方法,把返回值設定為false。
6、recordreader類
inputsplit定義了如何切分工作,recordreader類則定義了如何載入資料並轉換為適合map方法讀取的key-value對。其預設輸入格式為textinputformat。
7、outputformat類
與inputformat相似,其大多數繼承自fileoutformat,但nulloutputformat和dboutputformat除外。其預設格式為textoutputformat。outputformat提供了對recordwriter的實現,從而指定如何序列化資料。recordwriter類可以處理包含單個鍵值對的作業,並將結果寫入outputformat已準備好的位子中。recordwriter主要通過write和close兩個函式實現。write函式從mapreduce作業中取出鍵值對,並將其位元組寫入磁碟。close函式會關閉hadoop到輸出檔案的資料流。
outputformat的層次結構圖如下:
8、recordwriter類
linerecordwriter是預設使用的recordwriter,寫入內容包括:key的位元組,乙個用以定界的製表符,value的位元組,乙個換行符。
MapReduce程式呼叫第三方Jar包的方式
編寫mapreduce程式時經常會用到第三方的jar包,主要有一下三種方式 1 將第三方jar包copy至 hadoop home lib目錄裡 2 將第三方jar包和你的mapreduce程式打成乙個jar包 3 使用 libjars 這個引數。第一種方式貌似需要重啟hadoop集群,才能生效,豈...
Eclipse 除錯Mapreduce程式 (2)
我的程式是修復受損檔案,之前我總是故意將檔案塊移走,然後讓程式修復,這種移動開始會觸發異常,名字節點會一遍一遍地輪詢節點查詢被我移走的塊,呵呵,多做幾次,名字節點就聰明了,不再找了,直接讓我的程式退出,不得已,只能重新上傳檔案,再偷偷移走資料塊。很好的執行了幾次之後,突然eclipse報告找不到類,...
MapReduce程式執行過程
input 讀取程式輸入 預設 讀hdfs上檔案,將檔案拆分為分片split 500m 4個block 4個split 將每個split中的每一行轉換為乙個keyvalue key 行的偏移量 value 行的內容 map 將任務進行拆分嗎,啟動多個map task 來處理每個分片 預設 乙個分片對...