我有1 TB未排序的字数(字:count),我想运行一个map reduce作业来选择最大字数的单词。在这种情况下,我希望有一个变量可以在所有缩减作业之间共享,这些作业将保持目前字数最多的单词。 reduce函数只会检查这个变量并在必要时更新它。那可能吗?谢谢如何在hadoop中的所有减少作业之间共享变量
0
A
回答
2
我认为你误解了Mapreduce的工作原理。它恰恰不会在机器之间共享内存以提高吞吐量,尽管您受限于Mapreduce模型的机制。
为了做到你说的话,你会做以下几点:
Map : (word, count) -> (KEY_CONSTANT, (count, word))
而且
Combine/Reduce : (key, List<(count, word)>) -> (key, (count*, word*) with max count)
如果添加count
的关键,但要确保一切都还在一个分区,您可以告诉MapReduce按降序对count
进行排序,然后您可以实现一个单独的简化器,它只检查每个列表中的第一个值。但是,您无法对组合器执行此操作,其输入未分类。因为它不会读取其余的数据,所以可能会让实现更快。
有关如何有效地使用排序阶段的详细信息,请参阅How does MapReduce framework implement the sort phase?
2
你可以
- 设置减速机的数量为1
- 将两个实例变量添加到reducer类中,一个用于计数,另一个用于单词,以保存关于最频繁的词的形成呢。
- 将reduce()方法中的reduce setup()方法
- 中的变量初始化为reduce()方法,检查当前单词是否出现的次数多于最常出现的次数,如果是,则将单词和计数存入变量
- 在清理()方法,你可以访问的变量有最常说的一句话
如果需要运行多个减速,然后修改减速的清理()方法,而不是写出来的字并将其作为关键值对计算在上下文中。类似于上述原始减速器的后续减速器可以轻松找到出现次数最多的单词。
相关问题
- 1. Hadoop - 在链中多个作业之间共享文件
- 2. 如何在共享上下文之间共享RSpec让变量?
- 3. 在所有PHP进程之间共享变量/内存
- 4. 如何在代码后面的所有方法之间共享变量?
- 5. 作业之间共享配置
- 6. 在没有IPC的Perl中的子进程之间共享变量::共享
- 7. 如何在Hadoop中的映射器之间共享HashMap?
- 8. 如何在java中的两个线程之间共享变量?
- 9. 如何在Java中的两个线程之间共享变量?
- 10. 在makefiles之间共享变量
- 11. 在进程之间共享变量
- 12. 在两个winforms之间共享变量
- 13. 在类之间共享变量
- 14. 在PowerShell和C#之间共享变量
- 15. 在WordPress和CodeIgniter之间共享变量
- 16. 在方法之间共享变量
- 17. 在QStackedWidget页面之间共享变量
- 18. 在Go主机之间共享变量
- 19. angularjs在函数之间共享变量
- 20. 在类C++之间共享变量?
- 21. 如何限制hadoop中mapreduce java代码中减少作业的数量
- 22. 在asp.net中的操作之间共享变量MVC
- 23. 在两个共享对象之间共享变量
- 24. 如何与Hudson共享作业之间的BUILD_NUMBER
- 25. 如何在不同的.c文件之间共享变量?
- 26. 如何在导入的模块之间共享全局变量?
- 27. 如何共享类之间的变量在JavaScript
- 28. 如何在两个viewcontroller之间共享mapkit的变量?
- 29. 如何在模块之间共享相同的变量?
- 30. 在webservice之间共享业务对象
看看这个答案是否有帮助:http://stackoverflow.com/questions/15048013/sharing-data-between-master-and-reduce/15073701#15073701 – Amar 2013-03-01 19:09:28