Apache Impala
- Impala是个实时的查询工具,与hive相比,减少了YARN资源申请时间和MR计算过程的Shuffle
- Hive计算,SQL语句解析编译成MR程序,提交到YARN上运行
Impala,SQL语句不再转化成MR程序执行,而是编译成执行计划树 - Hive和Impala拥有相同的一套元数据,也可以理解成Impala直接使用Hive的元数据库
- Impala适用于实时查询的场景、hive适用于离线批处理场景
- 数据流方面,hive中前一个计算节点计算完成后将数据主动退给后一个节点。impala中,后续节点通过getNext主动向前面一个节点要数据。
- 内存方面,数据在内存中存不下的时候,hive会把数据shuff到寸。而impala会直接返回错误,不会存储到外存
Impala架构
写SQL、查询数据的软件
Impala 由Impalad、State Store、Catalogd、CLI四部分组成
Impala集群部署
Impalad(Impalad Server)可以部署多个不同机器Node上,通常与DataNode部署在同一个节点,方便数据本地计算(目的是减少网络传输),负责具体执行本次查询SQL的Impalad称之为Coordinator协调者,每个Impalad都可以对外提供服务
State Store保存Impalad的状态信息,监视健康状态
Catalogd:元数据维护的网关,负责跟hive的元数据进行交互,同步hive的元数据到impala自己的元数据中
CLI:用户操作Impala的方式(impala shell、jdbc、api)
Impala查询处理流程
- Impalad分为java前端(接收解析sql编译成执行计划树),c++后端(负责具体的执行计划树操作)
- CLI SQL
→ Impalad(Coordinator解析者)
→java前端解析SQL编译成执行计划树
→以Thrift数据格式返回给C++后端
→根据执行计划树、数据所在路径(libhdfs和hdfs交互)、impalad状态分配执行计划查询
→汇总查询结构
→返回给CLI
impala
-
impala的启动
service impala-state-store start
service impala-catalog start
service impala-server start -
impala的日志默认目录:var/log/impala
-
关闭impala服务,把命令中的start改成stop即可。
-
判断进程启动状态ps -ef|grep impala
-
如果关闭之后进程依然驻留,可以采取:rm -rf /tmp/hsperfdata_impala/jps_进程号
-
impalad的管理界面:2500端口
-
state-store的管理界面:25010端口
-
impala外部命令
不需要打开交互命令行,需要impala-shell 加参数启动
impala-shell -h 打开帮助手册
impala-shell -r 连接hive做元数据的更新
impala-shell -i yangjjhost03 指定连接
impala-shell -f 文件路径, 执行文件中的SQ语句L
impala-shell -q " 要执行的SQL语句"
impala-shell -o 保存执行结果到文件中 -
impala内部命令
impala-shell
connect yangjjhost03;
refresh dbname.tablename 增量刷新,主要用于刷新hive当中数据表里面的数据改变的情况
invalidate metadata 全量数显,主要用于hive当中新建数据库或者数据库表的时候进行刷新
impala元数据发生变化时,会自动更新hive元数据,hive元数据发生变化时,不能主动同步到impala元数据库
- Impala Sql 语法
drop database dbname cascade;
级联删除,不为空的数据库也会被删除
insert into table;
insert overwrite into table; 会清掉表中原有数据,新插入一条记录
describe tablename;desc formatted tablename;
truncate table删除表数据,保留表结构
order by 子句根据一个或多个列以升序或降序对数据进行排序。默认情况下,一些数据库按升序对查询结果进行排序。如果我们使用NULL FIRST,表中的所有空值都排列在顶行;如果我们使用NULL LAST,包含空值的行将最后排列
select查询的result中的行从0开始
insert into table tablename () values();
insert into table tablename select…from…;
create table tablename as select…from …;
. impala api编程
- 下载需要的jar包https://www.cloudera.com/downloads/connectors/impala/jdbc/2-6-20.html