使用join提高配置单元查询的性能

biswetbf  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(379)
hive -e "select e.school_id, e.school_name, e.school_location  from
(select  r.college_id, r.college_name
from
    College r
where
    college_id = '6789') tab1
full outer join
(select e.school_id, e.school_name, e.school_location 
 from  university
 lateral view explode(school) encTable as e
 where
     school_id = '12345') tab2
   on tab1.school_id=tab2.college_id
   limit 4 " > result456.csv

我目前正在运行一个配置单元查询,其中我加入了两个表university和college,collecge\u id与大学的school\u id匹配,这需要更多的时间来执行,因为我在university和college中都有更多的数据。是否需要任何更新来提高此查询的性能
在这里,它收集了大学和学校的所有数据,然后比较tab1.school\u id=tab2.college\u id,我觉得表现很差
有没有其他方法可以提高性能来获取相同的数据

cbjzeqam

cbjzeqam1#

对于配置单元查询,集群处理响应缓慢可能有多种原因。您可能需要考虑的一些优化因素如下-
您可能需要考虑对两个表中的数据使用“bucketing”,这可能有助于在使用Map联接时执行联接操作。在这种情况下,school\u id和college\u id是唯一的值,因此分区数据(分区表特性)将不适合使用。有关加入优化的更多信息,请参阅链接-https://cwiki.apache.org/confluence/display/hive/languagemanual+joinoptimization
您可能还需要考虑查询的并行处理优化。有关语法的详细信息,请参阅以下链接-https://community.hortonworks.com/content/supportkb/48919/how-can-i-set-hive-to-run-in-parallel-execution-to.html
我可以在您的配置单元查询中看到,您正在使用“完全外部联接”,这非常昂贵。由于您没有提到要求和示例数据,因此无法评论我们是否可以避免完全外部连接以获得所需的结果。
根据数据大小,您可能还需要调整集群的适当块大小。
你能不能也试着查一下减速机的号码,建议一个应该有你Map的0.95到1.75倍。此外,reducer应该有足够的数据来处理块大小,并且至少需要5到15分钟。
最好的方法是使用“explain”或“illustrate”命令(取决于您的配置单元版本)查看如何使用计划来处理查询。它将给你更多的优化洞察力。
没有硬性的规则来获得所有集群的优化配置。您可能需要尝试和测试不同的选项,以达到优化的水平。

相关问题