我有hadoop运行,基本上只是聚合键,它的代码:(映射器是身份映射器)
public void reduce(Text key, Iterator<Text> values,
OutputCollector<Text, Text> results, Reporter reporter) throws IOException {
String res = new String("");
while(values.hasNext())
{
res += values.next().toString();
}
Text outputValue = new Text("<all><id>"+key.toString()+"</id>"+res+"</all>");
results.collect(key, outputValue);
}
Run Code Online (Sandbox Code Playgroud)
它停留在这个水平:
12/11/26 06:19:23 INFO mapred.JobClient: Running job: job_201210240845_0099
12/11/26 06:19:24 INFO mapred.JobClient: map 0% reduce 0%
12/11/26 06:19:37 INFO mapred.JobClient: map 20% reduce 0%
12/11/26 06:19:40 INFO mapred.JobClient: map 80% reduce 0%
12/11/26 06:19:41 INFO mapred.JobClient: map 100% reduce 0%
12/11/26 06:19:46 INFO mapred.JobClient: map 100% reduce 6%
12/11/26 06:19:55 INFO mapred.JobClient: map 100% reduce 66%
Run Code Online (Sandbox Code Playgroud)
我在本地运行它看到了这个:
12/11/26 06:06:48 INFO mapred.LocalJobRunner:
12/11/26 06:06:48 INFO mapred.Merger: Merging 5 sorted segments
12/11/26 06:06:48 INFO mapred.Merger: Down to the last merge-pass, with 5 segments left of total size: 82159206 bytes
12/11/26 06:06:48 INFO mapred.LocalJobRunner:
12/11/26 06:06:54 INFO mapred.LocalJobRunner: reduce > reduce
12/11/26 06:06:55 INFO mapred.JobClient: map 100% reduce 66%
12/11/26 06:06:57 INFO mapred.LocalJobRunner: reduce > reduce
12/11/26 06:07:00 INFO mapred.LocalJobRunner: reduce > reduce
12/11/26 06:07:03 INFO mapred.LocalJobRunner: reduce > reduce
...
a lot of reduce > reduce ...
...
Run Code Online (Sandbox Code Playgroud)
最后,它完成了工作.我想问一下:
1)在减少>减少阶段它做了什么?
2)我怎样才能改善这一点?
Don*_*ner 11
在查看百分比时,0-33%是洗牌,34%-65%是排序,66%-100%是实际减少功能.
你的代码中的一切看起来都很好,但是我会在黑暗中捅一下:
您正在res反复创建并重新创建字符串.每次获得新值时,Java都会创建一个新的字符串对象,然后创建另一个字符串对象来保存连接.正如您所看到的,当字符串变得非常大时,这可能会失控.尝试使用StringBuffer替代品.编辑:StringBuilder比StringBuffer.更好.
无论这是否是问题,您都应该对其进行更改以提高性能.
| 归档时间: |
|
| 查看次数: |
3117 次 |
| 最近记录: |