大数据-impala(一)
imala基本介绍
impala是cloudera提供的一款高效率的sql查询工具,提供实时的查询效果,官方测试性能比hive快10到100倍,其sql查询比sparkSQL还要更加快速,号称是当前大数据领域最快的查询sql工具,impala是参照谷歌的新三篇论文(Caffeine、Pregel、Dremel)当中的Dremel实现而来。
impala是基于hive并使用内存进行计算,兼顾数据仓库,具有实时,批处理,多并发等优点。
impala与hive的关系
impala是基于hive的大数据分析查询引擎,直接使用hive的元数据库metadata,意味着impala元数据都存储在hive的metastore当中,并且impala兼容hive的绝大多数sql语法。所以需要安装impala的话,必须先安装hive,保证hive安装成功,并且还需要启动hive的metastore服务。
impala的优点
- impala比较快,非常快,特别快,因为所有的计算都可以放入内存当中进行完成,只要你内存足够大
- 摈弃了MR的计算,改用C++来实现,有针对性的硬件优化
- 具有数据仓库的特性,对hive的原有数据做数据分析
- 支持ODBC,jdbc远程访问
impala的缺点
- 基于内存计算,对内存依赖性较大
- 改用C++编写,意味着维护难度增大
- 基于hive,与hive共存亡,紧耦合
- 稳定性不如hive,不存在数据丢失的情况
impala的架构以及查询计划
Impala的架构模块
impala-server
启动的守护进程,执行我们的查询计划 从节点,官方建议与所有的datanode装在一起,可以通过hadoop的短路读取特性实现数据的快速查询。
impala-statestore
状态存储区 主节点。
impalas-catalog
元数据管理区 主节点。
查询执行
impalad分为frontend和backend两个层次, frondend用java实现(通过JNI嵌入impalad), 负责查询计划生成, 而backend用C++实现, 负责查询执行。
frontend生成查询计划分为两个阶段:
1)生成单机查询计划,单机执行计划与关系数据库执行计划相同,所用查询优化方法也类似。
2)生成分布式查询计划。 根据单机执行计划, 生成真正可执行的分布式执行计划,降低数据移动, 尽量把数据和计算放在一起。
上图是SQL查询例子, 该SQL的目标是在三表join的基础上算聚集, 并按照聚集列排序取topN。
impala的查询优化器支持代价模型: 利用表和分区的cardinality,每列的distinct值个数等统计数据, impala可估算执行计划代价, 并生成较优的执行计划。 上图左边是frontend查询优化器生成的单机查询计划, 与传统关系数据库不同, 单机查询计划不能直接执行, 必须转换成如图右半部分所示的分布式查询计划。 该分布式查询计划共分成6个segment(图中彩色无边框圆角矩形), 每个segment是可以被单台服务器独立执行的计划子树。
此博文仅供学习参考,如有错误欢迎指正。
上一篇《大数据-sqoop(六)》
下一篇《大数据-impala(二)》