我对从 Mapper 获得的输出有点困惑。
例如,当我运行一个简单的 wordcount 程序时,输入文本如下:
hello world
Hadoop programming
mapreduce wordcount
lets see if this works
12345678
hello world
mapreduce wordcount
这是我得到的输出:
12345678 1
Hadoop 1
hello 1
hello 1
if 1
lets 1
mapreduce 1
mapreduce 1
programming 1
see 1
this 1
wordcount 1
wordcount 1
works 1
world 1
world 1
如您所见,mapper 的输出已经排序。我根本没有跑Reducer
。但是我在另一个项目中发现映射器的输出没有排序。所以我完全清楚这一点..
我的问题是:
- 映射器的输出是否总是排序的?
- 排序阶段是否已经集成到映射器阶段,以便映射阶段的输出已经在中间数据中排序?
- 有没有办法从
sort and shuffle
阶段收集数据并在它进入减速器之前将其持久化?一个reducer 带有一个key 和一个iterables 列表。有没有办法,我可以保留这些数据?