2015-11-04 64 views
0

在reduce()和cleanup()中执行context.write()有什么区别? 我读过某处,只有在temp_dir中的输出移动到指定的输出目录后,才会调用清理。在reducer的cleanup()中调用context.write()有什么用处

另外如何在MR作业中使用treeMap和一些例子?

+1

至少,“还有如何在MR作业中使用treeMap和一些例子?”应该是一个不同的问题。 –

+0

是的。我有一个在setup()中声明treemap的程序,我需要找到最大频率的单词。我在reduce()中完成了这个场景,并试图通过cleanup()来打印结果。我的MR作业正在运行,但是ouptut显示了cleanup()循环中的最后一个单词。 –

+0

但你不觉得这应该是一个单独的问题吗? –

回答

1

减速任务有以下方法被称为是这样的:

run(): 
setup() 
for each record: 
    reduce() 
cleanup() 

因此,大家可以看到设置()和清理()被调用一次每个减速器任务而减少()被调用每个记录(记录是关键和价值)。

在缩减器中,一次只有一个键和它的值。在清理过程中,您可以累积所有值(来自每个Reducer)并进行一些处理并发出输出。

例如:

reducer task: 
    setup: create a map (hash or tree) 
    for each reducer: store key, values in map 
    cleanup() : use the map and emit the key or values or both you are interested in. 

警告:如果有太多的数据在你的内部结构(如树形图在这里)来存储,你可能会碰到机器,其中减少任务运行的内存限制。

相关问题