技术背景
- impala是参照谷歌的新三篇论文(caffeine-网络搜索引擎,pregel-图形数据库,dremel-瞬时类sql查询)
当中的dremel而来,号称是当前大数据领域最快的sql查询工具,比sparksql还要快速。但是sparksql是计算效率和数据安全的性价比最优的。 - 谷歌旧三篇论文(GFS-分布式文件存储,Bigtable-分布式数据库,Mapreduce-分布式计算)
设计目的
- 为了解决大数据分析场景中的分析速度和准确率的问题
- 代替hive来实现sql类的分析以及计算
核心特点
优点:
1.快: 计算速度是目前所有大数据计算框架中最快的,全部基于物理内存计算
2.与hadoop的生态兼容性非常好: 基于hive,直接读取hdfs数据
3.与硬件兼容性非常好: 底层是c++实现指令集操作
4.兼容HQL,能直接对hive中的表进行分析:
5.支持数据本地优先计算
6.支持列式存储格式:parquet,orc,rcfile
7.支持jdbc/odbc的远程访问: 与hive的jdbc访问相同缺点:
1.不稳定:全部基于物理内存,容易导致OOM,数据丢失
2.对硬件资源配置要求高
3.c++开发,学习开发,维护成本高
4.不提供序列化与反序列化
6.无法实现与hive的元数据自动同步,需要手动更新
集群角色
Client
- 是python写的
- 分别有shell,jdbc/odbc,hue/beewax
Impala-Shell
1. 外部命令
impala-shell -r,刷新整个元数据
-B,去格式化,
-- print_header 去格式化显示列名
--output_delimiter 指定分隔符
-f,执行查询文件
-i,连接到指定的impalad服务上去
-o,保存执行结果到输出文件
-p,显示查询计划
-q,不使用impala-shell查询
2. 内部命令
help 帮助命令
set 临时设置变量/参数值
connect 连接到指定的impalad服务
refresh db.tb 增量刷新,用于表数据修改刷新
invalidate metadata 全量刷新,也可以增量刷新,用于数据结构修改刷新
explain 查看执行计划 set explain_level=n,设置查看执行计划基本,1,2,3,其中3级别最详细
profile 查看执行步骤,用于查看查询结果,集群的调优
Server
- 内容: 分为frontend-server和backend-server,各个server上又有各自的细分服务
impala-catalog
概念:
类似于主节点,元数据的存储区,通过连接hive的metastore服务,进行hive的元数据缓存,且元数据更新单向,不同步更新,即在impala中操作数据时,hive会同时更新元数据,但在hive中操作数据时,impala不会自动更新元数据,需要手动更新(refresh、invalidate),当catalog启动时,会去自动读取一次hive的元数据职责:
1.负责接收所有impala从节点访问元数据的请求
2.负责与hive的metastore服务同步元数据解释:
1.启动这个进程时,这个进程会向impala-statestore进行注册,保持心跳
2.启动这个进程后,会从hive的metastore中同步一次元数据
3.当impala-server修改元数据时,要将更改请求提交给hivemetastore,并将新的元数据信息同步给所有的impala-server
impala-statestore
概念:
类似于主节点,负责管理从节点,是从节点的状态存储区,数据位置信息存储区职责:
1.管理所有从节点的存活状态,维护一个可用从节点的列表补充:
1.负责收集集群中的其他impala进程的资源信息,心跳信息,健康状态等
2.负责转播元数据
impala-server
概念:
Impala的server服务端;
类似于从节点,一般部署在hdfs的datanode上面,进行数据的short-circuit local read短路读取
是守护进程,用于执行我们的查询计划
客户端连接之后成为Coordinator协调者,也叫中心调度节点,类似于yarn中的appmaster;
在实际开发中,不要将所有任务都提交到一个中心调度节点,避免热点问题,因为解析和生成执行计划非常消耗资源,需要使用HAproxy来实现slb;职责:
1.接收客户端请求,并成为协调者
2.负责向主节点同步以及缓存哪些可用的从节点列表
3.获取各个从节点信息,并分配任务,实现分布式计算解释:
1.所有的impala-server在启动时都要向state-store进行注册,并保持心跳
2.负责接收所有客户端请求,谁接收请求,谁负责调度
3.condinator的作用:解析sql,调度任务,执行任务
frontend-server
概念:
属于impala-server的部分,java源码,负责查询计划的生成。概念:
查询计划的生成分为两个阶段:
1.先生成单机查询计划,查询优化之类的
2.然后生成分布式查询计划,数据和计算资源考虑之类的
backend-server
属于impala-server的部分,c++源码,负责查询的执行,使用指令集操作查询