所以这一直让我很困惑。我不确定 map-reduce 究竟是如何工作的,而且我似乎迷失在确切的事件链中。
我的理解:
- Master 将文件分块并将它们作为 (K1, V1) 交给映射器
- 映射器将获取文件并执行 Map(K1,V1)-> (K2,V2) 并将此数据输出到单个文件中。
- 这就是我迷路的地方。
- 那么这些单独的文件是如何组合在一起的呢?如果密钥在每个文件中重复怎么办?
- 这结合谁?是主人吗?如果这一步所有文件都进入Master,它们会不会成为一个巨大的瓶颈?是否全部合并到一个文件中?现在文件是否重新分块并交给减速器?
- 或者,如果所有文件都直接转到reducer,那么在流程结束时(K3,V3)文件中重复的K3会发生什么?它们是如何结合的?是否还有另一个 Map-Reduce 阶段?如果是这样,我们是否需要创建新操作:Map(K3,V3)->(K4,V4), Reduce(K4,V4)->(K3,V3)
我想总结一下,我只是不明白文件是如何正确重新组合的,它导致我的 map-reduce 逻辑失败。