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