impala调优

Impala是Cloudera开发、开源的一个原生于Hadoop的交互式SQL引擎。本身Impala的出现并不是为了替代Hive、Pig等现有的、常用的ETL工具。实用的场景往往于商业智能密不可分,比如对数据进行聚合(Aggregation)、做一些简单的分析统计(比如window function),通过JDBC/ODBC,集成到当今流行的BI工具中,例如Tableau等等。


这篇博文主要来探讨下关于Impala日常使用过程中的需要注意的点,不得不强调的是对于SQL的运行,一方面我们的确需要关注SQL本身的执行性能,比如多久可以执行完毕;但是,SQL的并发更是一个关键的考察点,毕竟我相信对于大部分生产上的集群,用户不止一位,任务也不止一个。另外,随着服务器标配的内存数日益增长,128GB、256GB的机器屡见不鲜,对于如何更加高效使用CPU会成为下一个热点 (CPU Efficiency)。

1. 使用Parquet
这一步一般是默认需要做的,在Impala中,定义Parquet格式数据表的示例:
  create table test_parquet (
   id int,
   name string
 ) 
 stored as parquet

2. 不使用压缩
是否压缩需要根据具体的场景而定。如果压缩,推荐使用Snappy。压缩的好处在于HDFS上存储了更少的数据以及在SQL执行期间网络传输了更少的数据。但是解压缩往往带来额外的CPU开销。如果执行的SQL本身是CPU密集型的,压缩就可能未必合适了。在Impala中不使用压缩的示例:
  set compression_codec=none;

3. 计算统计信息
计算统计信息后,一些简单的聚合计算,比如MAX(...)、COUNT(...),都可以根据预计算的结果快速相应。另外,Impala在计算Query Plan时也会利用这些统计信息,比如对JOIN顺序进行自动优化。需要注意的是这种自动“优化”并不一定100%带来性能的提升。在Impala中计算统计信息的示例:
 compute stats test_parquet;

4. HDFS Cache
HDFS允许将常用数据LOCK在内存中,以提高数据读取的效率。使用HDFS Cache时也要考虑权衡。毕竟这部分内存会被LOCK住,使得这部分内存无法在Impala计算过程中使用。因此,这一特征的使用要慎重,建议在某一数据被非常频繁地读取时考虑使用。在Impala中,使用HDFS Cache的示例:
 hdfs cacheadmin -addPool impala_pool -owner impala -limit 4000000000

 create table test_parquet (
   id int,
   name string
 )
 stored as parquest;

 alter table test_parquet set cached in 'impala_pool';
 alter table test_parquet set uncached;

5. 保持JOIN顺序
一般情况下,COMPUTE STATS会对JOIN的顺序进行自动优化。但是这个自动“优化”并不一定保证对所有的SQL都带来性能的提升 (需要测试)。对于那些性能下降的SQL,可以使用STRAIGHT_JOIN保证Impala在计算Query Plan保持原有的JOIN顺序。在Impala中,使用STRAIGHT_JOIN的示例:
 select STRAIGHT_JOIN id, name
 from test_parquet t inner join other_parquet o
 on t.id = o.id

6. SQL Hint指定JOIN方式
SQL JOIN过程涉及数据的网络传输,Impala支持两种模式BROADCAST与SHUFFLE,Impala会根据表的大小选择合适的模式,如果需要显示指定特定模式,Impala可以使用Hint,示例如下:
 select id, name
 from test_parquet t join [SHUFFLE] other_parquet o
 on t.id = o.id;

 select id, name
 from test_parquet t join [BROADCAST] other_parquet o
 on t.id = o.id;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值