這裡以redis資料庫為例。
這裡的例子是,我想統計日誌檔案中的某天各個小時的訪問量,日誌格式為:
?
1
2014
-
02
-
10
04
:
52
:
34
127.0
.
0.1
***
?
1
job.setoutputformatclass(fileoutputformat.
class
);
現在我們想要將任務計算結果輸出到資料庫(redis)中,怎麼做呢?可以繼承fileoutputformat類,定製自己的類,看**: ?
1234567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
40
下面就是整個job實現:public
class
loginlogoutputformat
extends
fileoutputformat
@override
public
void
write(k key, v value)
throws
ioexception,
interruptedexception
@override
public
void
close(taskattemptcontext context)
throws
ioexception,
interruptedexception
}
@override
public
recordwritergetrecordwriter(taskattemptcontext job)
throws
ioexception, interruptedexception
}
?
1234567
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
執行job後,就會在redis資料庫中有對應的key:public
class
loginlogstattask
extends
configured
implements
tool
}
public
static
class
myreducer
extends
reducer
context.write(key,
new
intwritable(count));
}
}
@override
public
int
run(string args)
throws
exception
else
long
ts = 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 =
new
path(jobname +
".out"
);
//以jobname.out作為輸出
fileoutputformat.setoutputpath(job, out);
class
);
//設定reducer
job.setreducerclass(myreducer.
class
);
//設定輸入格式
job.setinputformatclass(textinputformat.
class
);
//設定輸出格式
job.setoutputformatclass(loginlogoutputformat.
class
);
//設定輸出key型別
job.setoutputkeyclass(text.
class
);
//設定輸出value型別
job.setoutputvalueclass(intwritable.
class
);
job.waitforcompletion(
true
);
return
job.issuccessful()?
0
:
1
;
}
public
static
void
main(string args)
throws
exception
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...