Impala总结

tech2024-01-27  75

在拉勾教育大数据训练营的学习中,关于impala的学习总结

Impala

概述

开源的针对HDFS和HBASE中的PB级别数据进行交互式实时查询

优点

使用MPP没有使用MR,提升速度

使⽤用LLVM(C++编写的编译器器)产生运行代码

优秀的IO调度

选择适合的数据存储格式可以得到最好的性能

尽可能使用内存,中间结果不写磁盘,及时通过网络以stream的⽅式传递

缺点

Impala属于MPP架构,只能做到百节点级,一般并发查询个数达到20左右时

资源不不能通过YARN统⼀一资源管理理调度,所以Hadoop集群⽆无法实现Impala、Spark、Hive等组件 的动态资源共享。

与hive对比

查询过程:在Hive中,每个查询都有⼀一个“冷启动”的常⻅见问题。(map,reduce每次都要启动关闭,申 请资源,释放资源。。。)

中间结果:Hive通过MR引擎实现所有中间结果,中间结果需要落盘,impala是流的方式传递

交互查询:Hive不是理想的选择。

计算引擎:hive是MR,impala类似于MPP

容错:Hive是容错的,impala没有

查询速度:Impala⽐比Hive快3-90倍。

Hive: 复杂的批处理理查询任务,数据转换任务,对实时性要求不不⾼高同时数据量又很大的场景。

Impala:实时数据分析,与Hive配合使⽤用,对Hive的结果数据集进⾏行行实时分析。impala不不能完全取代 hive,impala可以直接处理理hive表中的数据。

架构原理

组件

impalad

负责读写数据文件,接收来自Impala-shell,JDBC,ODBC等的查询请求,与集群其它 Impalad分布式并行完成查询任务,并将查询结果返回给中⼼协调者。

为了了保证Impalad进程了解其它Impalad的健康状况,Impalad进程会⼀直与statestore保持通信。

Impalad服务由三个模块组成:Query Planner、Query Coordinator和Query Executor,前两个 模块组成前端,负责接收SQL查询请求,解析SQL并转换成执⾏计划,交由后端执行,

statestored

statestore监控集群中Impalad的健康状况,并将集群健康信息同步给Impalad,

catalogd

Impala执行的SQL语句引发元数据发生变化时,catalog服务负责把这些元数据的变化同步给其它 Impalad进程(日志验证,监控statestore进程日志)

catalogd进程所有请求都是经过 statestored进程发送,所以官⽅方建议让statestored进程与catalogd进程安排同个节点。

查询

Client提交任务

生成单机和分布式执⾏计划

单机执⾏计划: 根据上一步对SQL语句句的分析,由Planner先生成单机的执行计划,该执行计划是有PlanNode组成的⼀棵树,这个过程中也会执行一些SQL优化,例如Join顺序改变、谓词下推等。

分布式并行物理计划:将单机执⾏计划转换成分布式并行物理执⾏计划,物理执⾏计划由⼀个的Fragment组成,Fragment之间有数据依赖关系,处理过程中需要在原有的执⾏计划 之上加⼊一些ExchangeNode和DataStreamSink信息等。

任务调度和分发

Fragment之间的数据依赖

结果汇总

获取结果

使用

Impala-shell

外部命令

impala-shell –h

impala-shell –r

impala-shell –f

impala-shell –i

impala-shell –o

内部命令

connect hostname

refresh dbname.tablename 增量刷新

invalidate metadata全量刷新

explain可以不真正执⾏任务,只是展示任务的执行计划;

profile:需要任务执行完成后调⽤,可以从更底层以及更更详细的层面来观察我们运⾏impala的任务,进行调优。

Impala sql

创建数据库:CREATE DATABASE IF NOT EXISTS database_name;

删除数据库:drop database sample cascade;

create table语句

insert 语句

select语句

describe语句

alter table

delete、truncate table

view视图

order by⼦句

group by⼦句

limit、offset

Impala 导入数据

insert into values

insert into select

create table as select

load data⽅式,这种⽅式不建议在Impala中使⽤用,先使⽤用load data⽅式把数据加载到Hive表中,然后使用以上方式插⼊Impala表中。

负载均衡

HAProxy(官方推荐)

DNS做负载均衡

优化

避免⼩文件:insert ... values 会产⽣⼤量小⽂件,避免使⽤,文件格式:对于大数据量来说,Parquet⽂件格式是最佳的

合理理分区粒度:通常建议分区数量在3万以下 (太多的分区也会造成元数据管理的性能下降)

获取表的统计指标:减少传输客户端数据量:聚合(如 count、sum、max 等);过滤(如 WHERE );limit限制返回条数;返回结果不要使⽤用美化格式进⾏展示

在执⾏之前使⽤用EXPLAIN来查看逻辑规划,分析执⾏逻辑

Impala join⾃动的优化⼿段就是通过使⽤COMPUTE STATS来收集参与Join的每张表的统计信 息,然后由Impala根据表的⼤小、列的唯⼀值数目等来⾃动优化查询

最新回复(0)