Impala(2)常见优化方法(附带例子)

一、impala的两种hash join
  1. broadcast 

         适合大表join小表的场景,将小表广播到大表所在的所有节点,可以本地实现join。

  1. shuffle join

        适合两个大表join,将大表shuffle成多个部分,分别在不同的节点join。

二、常用优化思路方法
  1. 采用hints来指示Impala执行方法 

  • 大表 inner 小表 
    优化方法:select [straight_join] xxx from  A inner join[broadcast] B on xxxx
    straight_join 可以固定join的先后顺序,不加可以能把A大表做广播JOIN 
  • 大表 left join 大表 
    默认会广播右表,left join [shuffle] 会partitioned 再join 
  • 大表在前 小表在后
三、举个栗子 

 1.  A JOIN[shuffle] B JOIN[shuffle] C , A和B是小表,C是大表
  执行计划生成

 由于A B数据量很小,所以参与计算的节点只有2个instances;C表大表 加了shuffle后,会把数据partitioned到那两个节点,最终导致2个节点内存消耗过大,内存溢出。

  • 优化方法: JOIN顺序改成 C join B join A 
    C表先scan,开启节点增加,后面join A小表,并行操作,速度明显提升
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值