开发篇——Impala介绍

Posted xingoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发篇——Impala介绍相关的知识,希望对你有一定的参考价值。


导读


最近在做用户画像精准营销相关的需求,存储引擎采用的是HBase,为了查询方便打算使用一款基于SQL的查询计算工具——最终选择了Impala,下面就简单介绍下Impala相关的知识。


This browser does not support music or audio playback. Please play it in WeChat or another browser. 开发篇——Impala介绍 开发篇——Impala介绍

1 Impala的背景

    同样支持HBase sql查询的还有Phoenix,不过公司集群环境用的CDH,考虑到使用Impala安装管理会更方便点,最终就选择了Impala。Impala是Cloudera由C++编写的基于MPP(massively parallel processing)理念的查询引擎,由运行在CDH集群上的不同的守护进程组成,它跟Hive的metastore集成,共用database和tables等信息。

    Impala具有下面几个优势:

  • impala跟现有的CDH组件自动集成,数据可以被CDH中的各种组件共用

  • 支持sql查询hbase、hdfs、kudu等

  • impala只需要几秒钟或者分钟级别就能返回数据

  • 支持parquet、text、rcfile、hfile等文件格式

2 Impala的架构设计

Impala由三种进程组成:

Impalad

    impalad是impala主要的工作计算进程,负责接收client的请求,变成协调者角色,然后解析查询请求,拆分成不同的任务分发给其他的Impalad节点进程。每个Impalad工作节点进程接收到请求后,开始执行本地查询(比如查询hdfs的datanode或者hbase的region server),查询结果返回给协调者。协调者搜集到请求数据合并返回给client。

    通过上面的图也能看出,每个Impalad又包含三种角色,当接收到client的请求时,由planner解析查询sql,拆分成一个个可以并行的小任务;然后通过coordinator发送给其他的节点;其他的节点接收请求后,由excutor执行本地查询。

StatStore

    状态管理进程,负责搜集各个节点的健康状况,当某个节点挂掉时,负责通知其他的节点不要往这个节点发送任务。statestore由于只负责状态通知,因此当这个进程挂掉并不影响impalad查询,只是可能会发送任务到挂掉的节点,集群的鲁棒性差一些而已。

Catalog

    元数据变化同步进程,由于每个impalad都可以作为coordinator角色,那么当一个节点接收到数据变更,比如alter指令,其他的节点如何知晓呢?就可以通过catalog来同步,每个节点的变化都通知给catlog进程,它再同步给其他的节点,每个节点都维护一份最新的元数据信息,这样就不怕查询的数据不一致了。

3 Impala的使用

    impala可以通过四种方式进行查询:通过impala-shell脚本窗口执行查询命令,通过hue的可视化界面查询,通过jdbc或者odbc查询。关于impala-shell的使用以及命令就不多说了,查询文档即可。

https://www.cloudera.com/downloads/connectors/impala/jdbc/2-5-5.html

    如果查询HBase需要使用到三个jar:

    TCLIServiceClient.jar、ImpalaJDBC41.jar、libthrift-0.9.0.jar。

4 Impala的优化

于Impala的使用有一些最佳实践可以参考:

  • 文件格式推荐parquet,查询效率高

  • 避免碎片文件,注意文件的大小

  • 根据实际的文件大小和个数选择分区的粒度

  • 分区字段最好使用小的存储格式

  • 使用compute stats进行性能分析,提高join效率

  • 最小化返回数据量

  • 使用explain确认执行计划是否高效

  • 使用summary确认硬件消耗

  • 使用profile进行性能调优

  • 使用hdfs缓存提升查询性能

  • 使用profile查看是否有hdfs块倾斜,合理分配block大小


以上就是Impala的分析总结。

最近发现了一篇Impala的设计论文,稍后会阅读整理成文。


其他推荐:



xingoo

专注大数据与机器学习



以上是关于开发篇——Impala介绍的主要内容,如果未能解决你的问题,请参考以下文章

如何在Hive&Impala中使用UDF

0011-如何在Hive & Impala中使用UDF

Cesium开发入门篇 05Cesium API结构介绍

iOS开发UI篇—KVC简单介绍

开发平台介绍篇

iOS开发UI篇—Modal简单介绍