impala是cloudera 提供的一款高效率的sql查询工具,提供实时的查询效果,官方测试性能比hive快3到10倍,其sql查询比sparkSQL还要更加快速,号称是当前大数据领域最快的查询sql工具。
impala是基于hive并使用内存进行计算,兼顾数据仓库,具有实时,批处理,多并发等优点。
impala数据流理解 impala优点与缺点 优点1、基于内存运算,不需要把中间结果写入磁盘,省掉了大量的I/O开销。
2、无需转换为Mapreduce,直接访问存储在HDFS,Hbase中的数据进行作业调度,速度快。
3、使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。
4、支持各种文件格式,如TEXTFILE 、SEQUENCEFILE 、RCFile、Parquet。
5、可以访问hive的metastore,对hive数据直接做数据分析。
1、对内存的依赖大,且完全依赖于hive。
2、实践中,分区超过1万,性能严重下降。
3、只能读取文本文件,而不能直接读取自定义二进制文件。
4、每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新
1、impala-server ==>启动的守护进程,执行我们的查询计划从节点 (计算节点、从节点)
官方建议与所有的datanode 装在译器,可以通过hadoop的短路读取特性实现数据快速查询
2、impala-statestore ==> 状态存储区 (主节点)
3、impala-catalog ==> 元数据管理区 (主节点)
查询执行
impala分为 frontend和backend两个层次,frondend用Java实现(通过JNI嵌入impala),负责查询计划生成,而backend用C++实现,负责查询执行
frontend生成查询计划分为两个阶段:
1、生成单机查询计划,单机执行计划与关系数据库执行计划相同,所用查询优化方法也类似。
2、生成分布式查询计划,根据单机执行计划,生成真正可执行的分布式执行计划,降低数据移动,尽量把数据和计算放在一起
impala相关系统对比| HIVE | Spark | Impala | |
| 概要 | Hive是老牌的SQL-on-Hadoop解决方案 | spark之上的交互式SQL解决方案 提供Dataframe API作为SQL补充,方便实现ETL、分析、机器学习等复杂逻辑。 SparkSQL使用scala定义UDF,非常方便 | Hadoop上交互式MPP SQL引擎 |
| 容错 | 强。中间结果罗盘,容错能力强,最细粒度容错。 | 较强。基于数据血缘关系的数据回复。 | 弱。遇到问题时,需要重做查询 |
| 性能 | 慢,MR启动慢中间结果落盘 | 较快,基于RDD模型,DAG执行基于代价的查询优化内存基于列存储编译执行(生成java字节码)Java实现 | 快。MPP架构基于代价的查询优化,Join优化LLVM查询编译 C++实现向量执行引擎,可使用SSE指令列存IO本地化资源管理器优化(LLAM) |
LL



