【问题标题】:Hive distribute by vs without distribute byHive 分发方式与不分发方式
【发布时间】:2015-09-07 03:28:26
【问题描述】:

这听起来很简单,但这个问题困扰了我一段时间。

假设我有以下查询

SELECT s.ymd, s.symbol, s.price_close FROM stocks s
SORT BY s.symbol ASC;

在这种情况下,如果数据在符号列上具有良好的分布,那么基于符号列进行分布是有意义的,这样所有的 reducer 都能获得良好的数据份额;将查询更改为以下将提供更好的性能

SELECT s.ymd, s.symbol, s.price_close FROM stocks s
DISTRIBUTE BY s.symbol
SORT BY s.symbol ASC, s.ymd ASC;

如果我不指定distribute by子句会有什么影响?在第一个查询中选择的默认映射输出键列是什么,即它分布在什么列上?

【问题讨论】:

    标签: sorting hadoop hive distribute


    【解决方案1】:

    我自己找到了答案。使用排序依据,映射器的输出键不是应用排序依据的列。键可以是记录的文件偏移量。 reducer 的输出按每个 reducer 排序,但相同的按列值排序可能出现在多个 reducer 的输出中。这意味着减速器的输出之间存在重叠。 Distribute by 确保数据在 reducer 之间基于按列的分布进行拆分,因此通过确保相同的列值进入相同的 reducer 和相同的输出文件。

    【讨论】:

      【解决方案2】:

      可提供详细信息。我认为这就是您正在寻找的答案。 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy

      【讨论】:

      • 问题更多的是在未指定按列分配时会发生什么。减速机的关键是什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 2011-05-26
      • 2011-06-18
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多