配置单元按vs分发而不按分发

djp7away  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(393)

这听起来很基本,但这个问题困扰了我一段时间。
假设我有以下问题

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

在这种情况下,如果数据在符号列上具有良好的分布,那么基于符号列进行分布是有意义的,这样所有的归约器都能很好地共享数据;将查询更改为以下内容将提供更好的性能

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

如果我不指定distributedby子句,效果如何?在第一个查询中选择的默认Map输出键列是什么,即它分布在哪个列上?

ilmyapht

ilmyapht1#

有详细资料。我想这就是你想要的答案。https://cwiki.apache.org/confluence/display/hive/languagemanual+sortby

bvhaajcl

bvhaajcl2#

我自己找到了答案。使用sort by时,Map器的输出键不是应用sort by的列。键可以是记录的文件偏移量。reducer的输出按reducer排序,但相同的sort by column值可以出现在多个reducer的输出中。这意味着减速器的输出之间存在重叠。distribute by确保数据在基于distribute by列的缩减器之间拆分,从而确保相同的列值传递给相同的缩减器,从而输出相同的文件。

相关问题