示例:我有100台服务器,每台都有搜索索引的一部分。当客户端进行搜索时,我使用hadoop来浏览这些服务器并选择结果。必须对结果进行排序。
问题是每个单独任务输出的数据总量大于实际运行任务的服务器中的内存(RAM和HDD) - 所以我无法排序。
解决这个问题的正确方法是什么?
接下来的问题 - 我希望在搜索结果中加入分页 - 假设数据量很大 - 我不能使用任何缓存......
感谢
答案 0 :(得分:0)
Hadoop在完成地图处理后对与关键字相关联的值进行排序&在通过OutputKeyComparatorClass将值传输到reducer之前。如果要实现自己的排序算法,则需要编写自己的OutputKeyComparatorClass。
答案 1 :(得分:0)
首先,要了解Hadoop是专为批量处理而设计的(想想18轮车而不是玛莎拉蒂),所以如果这个搜索对用户有限制的时间限制,那么Hadoop就不适合这项工作。
话虽如此,Hadoop的设计优势在于分布式排序(映射器和缩减器之间发生的魔力),因此如果您担心内存不足,则需要以允许键的键值对组织数据按分布式排序进行排序,该排序是由集群内存和配置限制的内存。