虽然用户的设置是什么情况下剂量蜂巢减少数量只设置为1?

时间:2014-07-03 08:57:19

标签: numbers hive reduce

在hive中,例如order by,count(1),reduce数字只能设置为1。 那么,这是什么原因?感谢

1 个答案:

答案 0 :(得分:0)

在某些情况下,hive必须生成map-reduce程序,最终将使用单个reducer 对于你的情况:

  1. count():执行计数操作时,hiveserver最终会向客户端返回一个表示记录数量的数字。这个单一的号码必须从一个map-reduce程序返回到hiveserver 这个限制转化为count()的最终map-reduce必须有一个减速器这一事实 从性能方面来说,这根本不会打扰你,这个阶段的预还原器部分中的映射器将使用组合器,因此每个映射器将计算自己的行,而reducer只是添加那些的结果计数(在设置hive.map.aggr时适用)
    自hive 0.12以来,此行为已更改,hive可在运行计数时完全跳过reducer部分。看here

  2. order by:运行此命令,您要求hive返回全局排序的数据。使用map-reduce执行引擎时,我们可以考虑如何完成此顺序 候选人是此操作的映射器或缩减器。由于映射器没有任何共享,没有一个映射器可以生成包含整个表的输出,有序,在最好的情况下,它可以订购自己的分割。
    现在我们有减速器,我们可以将数据从映射器移动到减速器,因此第一个选择是将所有数据混合到一个减速器中,它可以轻松地对其进行排序。
    第二种选择是在不同的减速器之间分配,然后每个减速器只能订购它收到的数据 例如,reducer#1在排序后得到了这个数据[3,1,6]和reducer#2:[5,2],reducer#1将输出[1,3,6]和#2:[2,5]。 /> 结合两个输出togather将导致{strong>未订购设置为[1,3,6,2,5]
    确保多个Reducer(每个都对自己的数据进行排序)将产生全局排序结果集的唯一方法是改变当前map-reduce分区器的工作方式。
    目前,数据通过hash的{​​{1}}从映射器传递到reducer,如果我们可以以这样的方式对数据进行混洗,例如,所有小于3的值将转到reducer#1并且大于等于3将减速器#2然后,减速器#1将输出key和#2:[1,2]
    结合两个输出togather将导致有序设置为[3,5,6] 因此,在原始map-reducer程序中,由于shuffle限制,您只能使用单个reducer。这也似乎从hive 0.12(here)改变了,但我还没有测试过我自己。