Impala--组件与架构(一)
Impala
介绍
- 支持HDFS,HBASE数据的高性能,低延迟的交互式SQL查询。
- 基于hive使用内存计算,兼顾数据仓库,具备批处理,实时,多并发的优势。
用人话翻译一下数据库
- 高性能:基于内存。
- 低延迟:不会低到ms级别。
- 基于hive:hive相关模块有元数据模块,保存了海量数据文件内容的元数据;compile模块将SQL转化为MR;HIVE去执行SQL任务,无非是直接调用HDFS的API,又或者转化为MR去处理数据。元数据这个模块是很优秀的,hive的元数据模块其实就是以表的数据模型抽象了全部的文件数据集。除了表的数据模型,也能够用流式,dataset等等模型,模型不一样,操做方法不一样。基于hive只是基于hive的元数据模块。
- 使用内存:hive是转成MR的,MR又是基于磁盘的,全部中间结果都须要落磁盘。磁盘的优势就是稳定可靠,中间有步骤失败了,还能够从上一步磁盘结果重来,impala基于内存计算,中间全部结果都不落地磁盘,因此一旦中间有错误,任务直接失败,从头再来。
- 兼顾数仓:最好不要,数仓就是存放历史静态数据的,不须要你有多快,须要稳定。
- 与hive的关系:二者是共用元数据模块,背对背的关系,HIVE用MR和HDFS的API,Impala直接操做HDFS

优势
- 基于内存
- 无需转化为MR,直接读取HDFS
- C++编写,速度快
- 兼容HiveSQL
- 具备数仓特性,可直接对hive直接进行数据分析
- 支持DataLocal(将元数据库全部元数据预加载到内存)
- 支持列式存储(行式存储查询时不见得查全部字段,列式减小IO)
缺点
- 对内存依赖大(CDH公司推荐放ImpalaServer的机器内存128G)
- 彻底依赖于HIVE,稳定性不如HIVE
- C++编写,开源性,移植性不太好(os:C++太难了=_=)
- 实际作时,分区超过1W,性能降低严重(基于内存计算,粒度不一样,分组太多太吃内存)
架构&核心组件
impala是个无主模型
架构
- StateStore Daemon:收集分布在集群中各个impalad进程的资源信息(心跳),各节点健康情况,同步节点信息,一个实例。
- Catalog Daemon:从hive元数据库拉取元数据(不是实时的,启动拉一次,其余更新手动拉取),交给statestore分发表的元数据信息到各个impalad进程(因此最好部署在statestore节点上);若是有DDL操做,impalad心跳发给statestore,statestore再发给Catalog,statestore广播给impalad,更新每一个节点的元数据,保持一致性,同时Catalog更新给hive,一个实例。
- Impala Daemon:接收client,hue,jdbc,odbc请求,query执行并返回给中心协调节点,也是子节点的守护进程,负责向statestore汇报结果,保持通讯,多个实例,和DataNode一比一。
欢迎关注本站公众号,获取更多信息