1 概述
- 介绍
(1)交互式:基于内存计算,性能够高,速度快
(2)基于Hive:跟Hive共用一个MetaStore
-
Impala的优缺点
-
架构
(1)Catalog:将impala表的metadata分发到各个impalad
(2)Statestore:收集metadata,以及各个impalad的资源信息等,以及query的协调调度(执行impala语句后,各组件之间的协调关系)
(3)Impalad:包含Query Planner(负责语句的解析)、Query Coordinator(负责调度)、Query Executor(负责执行)
-
运行原理
- 执行impala语句之前,会先在集群上开启impalad进程
- impalad进程向Statestore发送注册信息
- 客户端发送SQL给impalad进程,由Query Planner解析SQL,由Query Coordinator获取相关元数据和数据地址,并给其他的impalad分配具体的执行任务(可能分配给自己)
- impalad的Query Executor去访问具体的数据并执行SQL,同时与其他的impalad交换执行信息
- 由第一个分配任务的impalad的Query Coordinator收集执行结果并返回给客户端
2 使用
-
使用方式一:可以通过hue连接impala进行sql语句的编写
-
使用方式二:外部shell
bash# 连接到其他机器的impala impala-shell -i 主机号:端口号 # 不进入shell直接执行sql impala-shell -q sql语句 # 不进入shell执行文件中的sql语句 impala-shell -f sql文件 # 把查询结果输出到文件 -o impala-shell -q sql语句 -o 输出文件 # 以格式化形式输出 -B impala-shell -q sql语句 -B -o 输出文件 # 打印表头 --print_header impala-shell -q sql语句 -B --print_header -o 输出文件 # 指定输出每列之间的分隔符 --output_delimiter impala-shell -q sql语句 -B --output_delimiter=";" -o 输出文件 # 进入shell后执行每一条sql都展示sql的执行详情 impala- shell -p # 查看impala版本 impala-shell -v # 刷新元数据库,当hive表插入新数据时,impala需要刷新元数据库才能读取到,全量刷新,刷新所有的数据库表的元数据(尽量不用 ) impala-shell -r # 在sql执行错误时跳过当前语句继续执行后续语句 -c impala-shell -c -f sql文件
-
使用方式三:内部shell
bash# 打开impala,使用时sql跟hive基本一样 impala-shell # 输出表结构 describe/desc 表名 # 查看执行计划 explain sql语句 # 输出上一条sql语句的详细执行计划 profile # 使用外部命令行,但不推出impala-shell shell shell命令 # sql查询,跟hive一样 select # 切换数据库 use 数据库名 # 查看版本 version # 连接其他impala connect ip地址 # 退出到命令行 exit / quit # 查看历史命令 history # 设置属性/取消属性 set/uset # 全量刷新元数据库,等同于impala-shell -r invalidate metadata # 增量刷新元数据库,只刷新指定表 refresh 表名
-
DDL操作
(1)创建数据库
(2)显示数据库
(3)删除数据库
(4)创建表
(5) 添加表数据
(6)分区相关操作
- DML操作
3 数据结构
- impala和hive数据结构对比
4 函数
- 自定义函数跟hive一样
5 压缩和优化
- impala支持的文件格式 ,Parquet和Text在impala中支持插入和查询,而RCFile和SequenceFile在impala中只支持查询,需要在hive中插入数据
-
优化操作