在我们编写程序时,Hadoop Mapreduce Jobs中的排序在哪里完成?我发现难以继续我的计划。
答案 0 :(得分:2)
排序由Hadoop MapReduce
框架完成。映射器输出传递给reducer的中间(键,值)对。每个reducer按排序顺序获取所有键。
<强>插图强>:
假设使用了2个映射器:
-- mapper1 output
key_a, value_a1
key_b, value_b2
key_c, value_c1
key_d, value_d2
-- mapper2 output
key_a, value_a2
key_b, value_b1
key_d, value_d1
key_d, value_d3
排序和随机播放(由Hadoop
框架完成的步骤)将确保中间键按排序键顺序传递给reducer。
使用2个减速器:
--- reducer1 input (sorted by keys)
key_a, [value_a1, value_a2]
key_d, [value_d2, value_d1, value_d3]
--- reducer2 input (sorted by keys)
key_b, [value_b2, value_b1]
key_c, [value_c1]
如果要确保传递给reducer的键之间的全局排序,可以使用Total Order Partitioner。在这种情况下,每个reducer将获得如下输入:
-- reducer1 input (sorted by keys - global)
key_a, [value_a1, value_a2]
key_b, [value_b2, value_b1]
-- reducer2 input (sorted by keys - global)
key_c, [value_c1]
key_d, [value_d2, value_d1, value_d3]