在MapReduce Hadoop中排序

Nag*_*ran 3 hadoop mapreduce cloudera mapr

我在Hadoop MapReduce中几乎没有基本问题.

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

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

vef*_*hym 5

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

是.

所有人都排序?

不.如果没有使用减速器,那么映射器的输出不会被排序.仅在存在减少阶段时进行排序.

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

不,出于同样的原因,如上所述.

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

不会.但是,按键已排序.在混洗阶段(缩减器获得映射器的输出)之后,它合并排序映射器的排序输出键(因为存在减少阶段),并且当它开始缩小时,键被排序.

3.假设有50个减速器被执行.它会生成50个文件吗?

是.(除非你使用MultipleOutputs)

所有单个文件都已排序?

不.排序的输入不保证排序的输出.输出取决于您在reduce方法中使用的算法.

所有减速机输出都排序?

不,出于与上述相同的原因.但是,如果您使用Identity Reducer,即只是在获得减速器时输入减速器,则减速器的输出将按PER REDUCER排序,而不是全局排序.

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

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