3

我对 Hadoop MapReduce 有几个基本问​​题。

  1. 假设如果执行了 100 个映射器并且零减速器。它会生成100个文件吗?所有个体都排序?对所有映射器输出进行排序?
  2. reducer 的输入是 Key -> Values。对于每个键,所有值都排序?
  3. 假设是否执行了 50 个减速器。它会生成50个文件吗?所有单个文件都已排序?对所有减速器输出进行排序?

在 MapReduce 中是否有保证排序发生的地方?

4

1 回答 1

5

1.假设如果执行了 100 个映射器并且零减速器。它会生成100个文件吗?

是的。

所有个体都排序?

不,如果没有使用 reducer,那么 mapper 的输出不会被排序。只有在减少阶段时才会进行排序。

对所有映射器输出进行排序?

不,出于与上述相同的原因。

2.reducer 的输入是 Key -> Values。对于每个键,所有值都排序?

不,但是,键是排序的。在reducer获取映射器的输出的混洗阶段之后,它对映射器的排序输出键进行合并排序(因为存在一个reduce阶段),当它开始reducer时,对键进行排序。

3.假设如果执行了 50 个 reducer。它会生成50个文件吗?

是的。(除非您使用MultipleOutputs

所有单个文件都已排序?

不,排序后的输入并不能保证排序后的输出。输出取决于您在 reduce 方法中使用的算法。

对所有减速器输出进行排序?

不,出于与上述相同的原因。但是,如果您使用 Identity Reducer,即,您只需在得到它时编写 reducer 的输入,reducer 的输出将按 PER REDUCER 排序,而不是全局排序。

在 MapReduce 中是否有保证排序发生的地方?

当存在 reduce 阶段时会进行排序,并将其应用于每个 mapper 的输出键和每个 reducer 的输入键。如果要对减速器的输入进行全局排序,可以使用单个减速器,也可以使用TotalOrderPartitioner,这有点棘手......

于 2015-07-16T08:16:00.403 回答