大数据全系列 教程
1869个小节阅读:464.7k
目录
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
ReducerTask类的runNewReducer()方法中:
xxxxxxxxxx
private <INKEY,INVALUE,OUTKEY,OUTVALUE> void runNewReducer(...){
......
try {
reducer.run(reducerContext);
} finally {
trackedRW.close(reducerContext);
}
......
}
reducer.run(reducerContext):
xxxxxxxxxx
public void run(Context context) throws IOException, InterruptedException {
//同一个ReduceTask会执行一次setup方法
setup(context);
try {
while (context.nextKey()) {
//同一组数据调用一次reduce方法,如果指定了自定义的Reducer类,就调用自定义类中的reduce方法
reduce(context.getCurrentKey(), context.getValues(), context);
// If a back up store is used, reset it
Iterator<VALUEIN> iter = context.getValues().iterator();
if(iter instanceof ReduceContext.ValueIterator) {
((ReduceContext.ValueIterator<VALUEIN>)iter).resetBackupStore();
}
}
} finally {
//同一个ReduceTask会执行一次cleanup方法
cleanup(context);
}
}
xxxxxxxxxx
public boolean nextKey() throws IOException,InterruptedException;
Ctrl+Alt+B->ReduceContextImpl:
xxxxxxxxxx
public boolean nextKey() throws IOException,InterruptedException {
while (hasMore && nextKeyIsSame) {
nextKeyValue();
}
if (hasMore) {
if (inputKeyCounter != null) {
inputKeyCounter.increment(1);
}
//还有下一组数据
return nextKeyValue();
} else {
//后续没有下一组数据则返回false
return false;
}
}