Hive联合所有效率和最佳实践

时间:2017-06-06 14:21:01

标签: performance hadoop hive union-all

我有一个蜂巢效率问题。我有2个大量的查询需要过滤,与映射表连接,并联合。两个表的所有连接都相同。在将联接应用于组合表之前联合它们或者将联接单独应用于每个大型查询然后将结果联合起来会更有效吗?这有什么不同吗?

我尝试了第二种方式,查询运行了24小时才杀死它。我觉得我尽我所能来优化它,除非可能重新排列union语句。一方面,我觉得它应该无关紧要,因为映射表连接的数量或行是相同的,因为一切都是腭化的,所以它应该花费大致相同的时间量。另一方面,也许首先进行联合,它应该保证在连接运行之前给两个大查询提供完整的系统资源。然后,这可能意味着一次只运行2个作业,因此系统没有被完全使用或者其他东西。

我根本不了解蜂巢和它的多线程是如何工作的。有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

没有这样的最佳做法。这两种方法都适用。 UNION ALL中的子查询作为并行作业运行。因此,union之前的join将作为具有较小数据集的并行任务工作,tez可以优化执行,并且公共连接表将在每个表的单个映射器阶段中只读取一次。 此外,您可以避免某些子查询的连接,例如,如果它们的键不适用于连接。

加入union-ed更大的数据集也可以使用非常高的并行度,具体取决于您的设置(例如每个reducer的字节数),优化器也可以重写查询计划。因此,我建议您检查两种方法,测量速度,学习计划并检查是否可以更改某些内容。改变,衡量,研究计划......重复

更多建议: 尝试在加入数据集之前限制数据集。如果您的连接乘以行,那么分析和聚合在较大的数据集上可能会运行得更慢,如果您可以在联合之前应用分析/聚合,则第一种方法可能更好。

相关问题