Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。
Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询。
在impala中一条SQL语句先后经历BeeswaxService.Query->TClientRequest->TExecRequest,最后把TExecRequest交由impala-coordinator分发给多个backend处理。
查询语句:
show table status students;
describe students;
impala优化:
>explain sql; #查看执行计划
>profile; #输出底层信息计划
>summary;#查看查询时间及占用内存
注意项:
1)Join的时候大表一定要放在左边,因为impala在广播右侧表,所以右侧表会复制到需要右侧表进行联接的所有节点。
2)广播连接(Broadcast joins) 是默认方式,右侧的表被认为比左侧的表小,并且它的内容被发送到查询涉及到的其他节点上。替代的技术称作分割连接(partitioned join) (与分区表无关),更适用于近乎相同大小的大型表的连接。使用这一技术,每一个表的部分内容被发送到对应的其他节点,然后这些行的子集可以并行处理。广播和分区连接的选择仍然依赖于连接中所有表的可用的、使用 COMPUTE STATS 语句的统计信息。
impala配置项:
set DISABLE_UNSAFE_SPILLS=0/FALSE; #0(FALSE)内存运算濒临溢出时转为磁盘运算,1(TRUE)时,当内存溢出时直接报内存溢出“Memory limit exceeded”错误
set mem_limit=-1 #取消内存限制;
参考资料:
Impala和Hive的关系(详解):https://www.cnblogs.com/zlslch/p/6785207.html
Impala原理及其调优:https://www.cnblogs.com/chenz/articles/3947147.html