定製mapreduce輸出

2021-06-26 17:58:45 字數 4561 閱讀 8739

這裡以redis資料庫為例。

這裡的例子是,我想統計日誌檔案中的某天各個小時的訪問量,日誌格式為:

?

1

2014-02-1004:52:34127.0.0.1***

?

1

job.setoutputformatclass(fileoutputformat.class);

現在我們想要將任務計算結果輸出到資料庫(redis)中,怎麼做呢?可以繼承fileoutputformat類,定製自己的類,看**: ?

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

40

publicclassloginlogoutputformatextendsfileoutputformat@overridepublicvoidwrite(k key, v value)throwsioexception,interruptedexception@overridepublicvoidclose(taskattemptcontext context)throwsioexception,interruptedexception}@overridepublicrecordwritergetrecordwriter(taskattemptcontext job)throwsioexception, interruptedexception}
下面就是整個job實現:

?

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

4041

4243

4445

4647

4849

5051

5253

5455

5657

5859

6061

6263

6465

6667

6869

7071

7273

publicclassloginlogstattaskextendsconfiguredimplementstool}publicstaticclassmyreducerextendsreducercontext.write(key,newintwritable(count));}}@overridepublicintrun(string args)throwsexceptionelselongts = system.currenttimemillis();string jobname ="login_logs_stat_job_"+ ts;job job = job.getinstance(conf, jobname);job.setjarbyclass(loginlogstattask.class);//新增輸入檔案路徑for(path p : inputs)//設定輸出路徑path out =newpath(jobname +".out");//以jobname.out作為輸出fileoutputformat.setoutputpath(job, out);class);//設定reducerjob.setreducerclass(myreducer.class);//設定輸入格式job.setinputformatclass(textinputformat.class);//設定輸出格式job.setoutputformatclass(loginlogoutputformat.class);//設定輸出key型別job.setoutputkeyclass(text.class);//設定輸出value型別job.setoutputvalueclass(intwritable.class);job.waitforcompletion(true);returnjob.issuccessful()?0:1;}publicstaticvoidmain(string args)throwsexception
執行job後,就會在redis資料庫中有對應的key:

mapreduce 多路輸出

streaming支援多路輸出 suffixmultipletextoutputformat 如下示例 hadoop streaming input home mr data test tab output home mr output tab test out19 outputformatorg....

mapreduce多檔案輸出

1 reducer函式中設定多檔案輸出屬性mos private multipleoutputsmos 2 setup 方法中建立物件 mos new multipleoutputs context 3 reduce 方法中對每個類別的檔案寫入,三個引數分別是輸出的key,value,以及類別命名。...

MapReduce輸出格式

針對前面介紹的輸入格式,mapreduce也有相應的輸出格式。預設情況下只有乙個 reduce,輸出只有乙個檔案,預設檔名為 part r 00000,輸出檔案的個數與 reduce 的個數一致。如果有兩個reduce,輸出結果就有兩個檔案,第乙個為part r 00000,第二個為part r 0...