Impala用于交互实时查询,最⼤大特点就是快速,Impala中文翻译是高角羚羊。
Impala使用MPP技术,MPP是将任务并行的分散到多个服务器器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果。

Impala基础知识点--笔记

Impala没有容错,由于良好的查询性能,Impala遇到错误会重新执行一次查询Impala的缺点: 1. Impala属于MPP架构,只能做到百节点级,一般并发查询个数达到20左右时,整个系统的吞吐已经达到满负荷状态,在扩容节点也提升不不了了吞吐量量,处理理数据量量在PB级别最佳。 2. 资源不不能通过YARN统⼀资源管理理调度,所以Hadoop集群⽆无法实现Impala、Spark、Hive等组件的动态资源共享

适用场景: Hive: 复杂的批处理理查询任务,数据转换任务,对实时性要求不高同时数据量量又很大的场景。 Impala:实时数据分析,与Hive配合使用,对Hive的结果数据集进行实时分析。impala不不能完全取代hive,impala可以直接处理hive表中的数据。

Impala基础知识点--笔记

impala-server:官方建议把impala-server安装在datanode节点,更更靠近数据(短路路读取),进程名impalad;impala-statestored:健康监控角色,主要监控impala-server,impala-server出现异常时告知给其它impala-server;进程名叫做statestored;impala-catalogd :管理理和维护元数据(Hive),impala更更新操作;把impala-server更新的元数据通知给其它impala-server,进程名catalogd;官方建议statestore与catalog安装在同⼀一节点上!!

短路读取:就是Client与DataNode属于同一节点,无需再经过网络传输数据,直接本地读取。
Impala基础知识点--笔记

Impala是通过Hive的metastore服务来访问和操作Hive的元数据,但是Hive对表进行创建删除修改等操作,Impala是无法自动识别到Hive中元数据的变更更情况的,如果想让Impala识别到Hive元数据的变化,所以需要进入impala-shell之后⾸首先要做的操作就是执行invalidatemetadata,该命令会将所有的Impala的元数据失效并重新从元数据库同步元数据信息。

原理:
Impala基础知识点--笔记

分布式执行计划:
Impala基础知识点--笔记

Impala使用:1. Impala与Hive类似它们的重点都是在与查询,所以像Update,delete等具有更更新性质的操作最好不要使用这种工具,对于删除数据的操作可以通过Drop Table,Alter Table Drop Partition来实现,更新可以尝试使⽤用Insert overwrite方式2. 通常使⽤用Impala的方式是数据文件存储在Hdfs文件系统,借助于Impala的表定义来查询和管理理Hdfs上的数据文件;3. Impala的使用大多数与Hive相同,比如Impala同样支持内外部表,以及分区等,可以借鉴参考Hive的使用。

impala-shell –r刷新impala元数据,与建立连接后执行 REFRESH 语句句效果相同(元数据发生变化的时候)impala-shell –f 文件路路径执行指的的sql查询文件。impala-shell –i指定连接运行impalad守护进程的主机。默认端口是 21000。你可以连接到集群中运行impalad 的任意主机。impala-shell –o保存执行结果到文件当中去。

impala 对与text存储格式中的复杂类型不支持,复杂类型要使用parquet格式
Impala的Truncate Table语句用于从现有表中删除所有记录。保留表结构。

where与having的区别: where:过滤的数据是原始数据,表中本来就存在的数据; having:过滤的是查询结果数据;

导入数据: 不建议使用load data方式。先使用load data方式把数据加载到Hive表中,然后使用insert into select/insert into values方式插入Impala表中。

impala集群负载均衡: Cloudera官方推荐的代理理方案:HAProxy
使用HAProxy方式访问:impala-shell -i linux123:25003; jdbc:hive2://linux123:25004/default;auth=noSasl

Impala优化
文件格式: 对于大数据量量来说,Parquet文件格式是最佳的避免小文件: insert … values 会产⽣生⼤大量量小文件,避免使⽤用合理理分区粒度: 利利用分区可以在查询的时候忽略掉无用数据,提高查询效率,通常建议分区数量量在3万以下(太多的分区也会造成元数据管理理的性能下降)分区列列数据类型最好是整数类型: 分区列列可以使用string类型,因为分区列列的值最后都是作为HDFS目录使用,如果分区列列使用整数类型可以降低内存消耗获取表的统计指标: 在追求性能或者⼤大数据量量查询的时候,要先获取所需要的表的统计指标 (如:执行行 compute stats )减少传输客户端数据量量: 聚合(如 count、sum、max 等) 过滤(如 WHERE ) limit限制返回条数 返回结果不要使用美化格式进行展示(在通过impala-shell展示结果时,添加这些可选参数: -B、 --output_delimiter )在执⾏行行之前使⽤用EXPLAIN来查看逻辑规划,分析执行逻辑Impala join自动的优化手段就是通过使用COMPUTE STATS来收集参与Join的每张表的统计信息,然后由Impala根据表的大小、列的唯一值数目等来自动优化查询。为了更加精确地获取每张表的统计信息,每次表的数据变更时(如执行Insert,add partition,drop partition等)最好都要执行一遍COMPUTE STATS获取到准确的表统计信息。

相关文章: