我想知道如果我们不仅需要计算一个简单的指标(例如最流行的词),还需要计算许多指标(例如以下所有指标:平均身高分解为性别,前 10 个站点分解为电话类型),hadoop 如何处理日志文件解析,热门词分解成成人/儿童)?
在不使用hadoop的情况下,我能想到的一个典型的分布式解决方案是:使用hash等将日志拆分到不同的机器上;每台机器解析自己的日志文件并为这些日志文件计算不同的指标。结果可以存储为 SQL、XML 或文件中的其他格式。然后主机解析这些中间文件,聚合这些指标并将最终结果存储到另一个文件中。
使用hadoop,如何获得最终结果?我看到的所有例子都是非常简单的例子,比如count words。
我只是无法弄清楚 hadoop mapreducer 将如何合作以智能地将中间文件聚合到最终结果。我想也许我的映射器应该将中间文件保存在某个地方,而我的减速器应该解析中间文件以获得最终结果。我一定是错的,因为如果我的 mapper 和 reducer 以这种方式实现,我看不到任何好处。
据说map和reduce的格式应该是:
map: (K1, V1) → list(K2, V2)
combine: (K2, list(V2)) → list(K2, V2)
reduce: (K2, list( V2)) → 列表(K3, V3)
总之,如何设计我的映射器和减速器代码(假设使用python,其他语言也可以。)有人可以回答我的问题或提供链接供我阅读吗?