Apache Impala是个实时的SQL查询工具,类似于Hive的操作方式,只不过执行的效率极高,号称当下大数据生态圈中执行效率最高的SQL类软件(Apache Impala是对于Hadoop来说的一个开源的、分析数据库。)
Cloudera公司推出,提供对HDFS、HBase数据的高性能、低延迟的交互式SQL查询功能。
基于Hive,与Hive共用一套元数据存储【使用Impala的时候必须保证Hive服务时正常可靠的,至少MetaStore元数据服务开启】使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点。
是CDH平台首选的PB级大数据实时查询分析引擎。
Impala是一个适用于实时交互查询的SQL软件,Hive适合于批处理查询的SQL软件。通常是两个配合工作:先用Hive对数据信息预处理清洗,接下来再用Impala进行快速的实时查询。
Impala的优缺点
优点
1基于内存运算,不需要把中间结果写入磁盘
,省掉了大量的I/O开销。
2无需转换SQL为Mapreduce
进行并行计算,而是编译成执行计划树
,直接访问存储在HDFS,HBase中的数据进行作业调度,速度快。[分布式计算不见得速度快,不适用交互式场景]
3使用了支持Data locality(数据本地化-最大使用内存,尽量不写磁盘)的I/O调度机制,尽可能地将数据和计算分配在同一台(DataNode所在)机器上进行,减少了网络开销。
4支持各种文件格式,如TEXTFILE、SEQUENCEFILE、RCFile、Parquet。
5可以访问hive的元数据metasore,对hive数据直接做数据分析
6Impala的SQL语句几乎兼容Hive的SQL语句
缺点
1对内存依赖大,不支持自定义函数(UDF),能处理的问题域有一定限制,且完全依赖于hive。
2实践中,分区超过1万,性能严重下降。
3只能读取文本文件,而不能直接读取自定义二进制文件。
4每当新的记录/文件被添加到HDFS中的数据目录时,该表需要刷新。
5查询过程中,没有容错逻辑,如果在执行过程中发生故障,则直接返回错误
Impala的架构
Impala自身包含三个模块:Impalad、Statestore和Catalog,除此之外,它还依赖Hive MetaStore和HDFS。
Imaplad
- 与DataNode运行在同一节点上,接收client的SQL请求,生成查询计划树
- 中心协调节点(触发器)把查询计划发送给子节点上的守护进程
- 负责向Statestore保持通信,汇报工作
Catalog
分发表的元数据信息到各个Impalad中,接收来自Statestore的所有请求
StateStore状态存储服务
负责收集分布在集群中各个Impalad进程的资源信息、各节点健康状况,同步节点信息
ODBC是客户端,Statestore是存储元数据的,Catalog是用来抓取元数据的,Impalad服务负责数据计算(包含查询计划、查询触发器和查询执行器)
客户端发送SQL给Impalad,Impalad交给查询计划,查询计划交给中心协调节点(触发器),中心协调节点(触发器)先在Statestore查找元数据,再和执行器做交互进行数据本地化过程。执行器查询完把结果返回触发器,触发器将结果返回客户端。
网友评论