这是关于Hadoop
的一个非常基本的问题:
假设我有3 mappers
和2 reducers
。映射器产生以下输出:
Mapper 1 output : {1 -> "a1", 2 -> "b1"}, Mapper 2 output : {2 -> "b2", 3 -> "c2"}, Mapper 3 output : {1 -> "a3", 3 -> "c3"}
现在,据我所知,框架将输出分为两部分(每reducer
部分)。框架是否在分区之前对所有输出进行排序? reducers
是否可能获得以下输入?
Reducer 1 input : {1 -> "a1", 2 -> "b1", "b2"} Reducer 2 input : {1 -> "a3", 3 -> "c2", "c3"}
答案 0 :(得分:2)
假设您的符号在上面是Key -> Value
,那么这应该是不可能的,因为您将密钥1同时转到reducer 1和reducer 2(可能这是拼写错误?)。
关于操作的顺序:
因此,在地图任务结束时,您将有一个或多个已排序的溢出(按分区排序,然后是键)。
如果你有一个组合器,那么组合器可以在为该分区写下K,V对之前运行(如果该分区中的对数超过某个阈值)。