开发篇——Impala介绍
Posted xingoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发篇——Impala介绍相关的知识,希望对你有一定的参考价值。
导读
最近在做用户画像精准营销相关的需求,存储引擎采用的是HBase,为了查询方便打算使用一款基于SQL的查询计算工具——最终选择了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介绍的主要内容,如果未能解决你的问题,请参考以下文章