impala的主要组成部分:
组成部分:1、Impala Daemon(守护进程impalad,核心的进程) 它负责读写数据文件,接收从impala-shell、Hue、JDBC、ODBC等接口发送的查询语句,并行化查询语句和分发工作任务到Impala集群的各个节点上,同时负责将本地计算好的查询结果发送给协调器节点(coordinator node)
2、Statestore (状态商店) 负责和impalad 保持通讯,记录状态,如果节点出现问题,会通知其他节点不往问题节点发送工作任务,由于statestore是当集群节点有问题的时候起通知作用,所以它对Impala集群并不是有关键影响的。如果statestore没有运行或者运行失败,其他节点和分布式任务会照常运行,只是说当节点掉线的时候集群会变得没那么健壮。当statestore恢复正常运行时,它就又开始与其他节点通信并进行监控
3、Impala Catalog,()负责将元数据的变化通知到各个节点,减少REFRESH和INVALIDATE METADATA语句的使用
之前的版本中,当在某个节点上执行了CREATE DATABASE、DROP DATABASE、CREATE TABLE、ALTER TABLE、或者DROP TABLE语句之后,需要在其它的各个节点上执行命令INVALIDATE METADATA来确保元数据信息的更新。同样的,当你在某个节点上执行了INSERT语句,在其它节点上执行查询时就得先执行REFRESH table_name这个操作,这样才能识别到新增的数据文件。
Impala的查询处理过程:
1、提交查询任务
2、提交到的impalad节点负责读取元数据和数据地址
3、分发任务到各个节点
4、将结果发送到协调器汇总,返回数据
impala的优化点:
1.分区不能超过1w多
2.要执行compute stats xxx 表 进行表信息搜集
3.join时,把小表写前面,会把小表广播到其他节点。
4.选择parquert 格式存储。
5.避免产生很多小文件(如果有其他程序产生的小文件,可以使用中间表,将小文件存放到中间表然后写入到要执行的表里A—>V—>B)
6.使用profile输出底层信息计划,在做相应环境优化
7.刷新Impala表
1.invalidate metadata 最好后面跟上表,禁止单独执行该语句(什么都不跟)。
2. 外部表,如果是hive建立分区,那就需要刷新,刷新是在元数据中更新分区信息。更新过了,直接放入数据