美文网首页Impala
Impala--简明调优手册

Impala--简明调优手册

作者: 撸码小丑 | 来源:发表于2018-12-17 18:24 被阅读26次

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格式数据表的示例:

| <wbr> <wbr>create table test_parquet (

<wbr> <wbr>id int,

<wbr> <wbr>name string

<wbr>) <wbr>

<wbr>stored as parquet

|

2. 不使用压缩

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

| <wbr> set compression_codec=none; |

3. 计算统计信息

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

| <wbr>compute stats test_parquet; |

4. HDFS Cache

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

| <wbr>hdfs cacheadmin -addPool impala_pool -owner impala -limit 4000000000

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

<wbr>alter table test_parquet set cached in 'impala_pool';
<wbr>alter table test_parquet set uncached; |

5. 保持JOIN顺序

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

| <wbr>select STRAIGHT_JOIN id, name
<wbr>from test_parquet t inner join other_parquet o
<wbr>on t.id = o.id |

6. SQL Hint指定JOIN方式

SQL JOIN过程涉及数据的网络传输,Impala支持两种模式BROADCAST与SHUFFLE,Impala会根据表的大小选择合适的模式,如果需要显示指定特定模式,Impala可以使用Hint,示例如下:

| <wbr>select id, name
<wbr>from test_parquet t join [SHUFFLE] other_parquet o
<wbr>on t.id = o.id;

<wbr>select id, name
<wbr>from test_parquet t join [BROADCAST] other_parquet o
<wbr>on t.id = o.id; |

7. Impala Admission Control并发度设置

默认情况下,Impala允许20个SQL并行执行,如果用户提交超过20个SQL,比如提交30个SQL,剩余的10个SQL会放到queue中等待空闲资源。如果等待时间超过60s,等待的SQL会被自动KILL掉。然而,在实际应用时,客户可能希望所有提交的SQL都可以顺利执行完毕,因此无论客户同时提交多少个SQL请求,都需要缓存(queue)起来。

接着让我们看看如何对并发性进行控制:

设置动态资源池

Impala简明调优手册

在default资源池为impala设置最大并行执行的SQL数量以及最大queue的SQL数量

Impala简明调优手册

设置使用default资源池

Impala简明调优手册

在impalad中设置SQL在queue中的等待(或者叫 超时)时间

Impala简明调优手册

相关文章

  • Impala--简明调优手册

    Impala是Cloudera开发、开源的一个原生于Hadoop的交互式SQL引擎。本身Impala的出现并不是为...

  • Nginx负载调优总结

    nginx负载调优总结 一、调优手册 二、参数获取方式及调优详解: 对nginx的调优很大一部分是对nginx配置...

  • Java垃圾回收手册(五):GC调优

    GC调优 翻译原文 => plumbr Java GC handbook 前文参见: Java垃圾回收手册(一):...

  • mysql 二进制包安装

    1. 文档说明 简述mysql数据库基础安装配置手册,性能调优需要结合my.cnf的参数进行调优,将在其他文档中进...

  • mysql 源码编译安装

    1. 文档说明 简述mysql数据库基础安装配置手册,性能调优需要结合my.cnf的参数进行调优,将在其他文档中进...

  • mysql RPM包安装

    1. 文档说明 简述mysql数据库基础安装配置手册,性能调优需要结合my.cnf的参数进行调优,将在其他文档中进...

  • tomcat-容器之apr运行模式

    由于项目中用的是tomcat容器,所以就关注了tomcat的调优。查阅了很多tomcat调优的手册,无一例外的首先...

  • Org-mode 简明手册

    Org-mode 简明手册

  • hive 参数调优手册

    1. reduce 个数设置 方法1.调整hive.exec.reducers.bytes.per.reducer...

  • JVM调优

    1 调优层次 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。架构调优和代...

网友评论

    本文标题:Impala--简明调优手册

    本文链接:https://www.haomeiwen.com/subject/foickqtx.html