1、概述html
Impala 是参照google 的新三篇论文Dremel(大批量数据查询工具)的开源实现,功能相似shark(依赖于hive)和Drill(apache),impala 是clouder 公司主导开发并开源,基于 hive并使用内存进行计算,兼顾数据仓库,具备实时,批处理,多并发等优势。是使用cdh 的首选PB 级大数据实时查询分析引擎。(也能够单独安装使用,但通常都是和CDH一块儿使用;) 参考: https://www.cloudera.com/products/open-source/apache-hadoop/impala.html http://impala.apache.org/
Impala能够直接在存储在HDFS,HBase或Amazon Simple Storage Service(S3)中的Apache Hadoop数据上提供快速,交互式的SQL查询。 除了使用相同的统一存储平台, Impala和Apache Hive同样还使用相同的元数据,SQL语法(Hive SQL),ODBC驱动程序和用户界面(Hue中的Impala查询UI)。 Impala是用于查询大数据的工具的补充。 Impala不会替代基于MapReduce的批处理框架,如Hive。 基于MapReduce的Hive和其余框架最适用于长时间运行的批处理做业, 例如涉及批处理Extract,Transform和Load(ETL)类型做业的工做。
2、impala架构前端
Impala属于无主模型,没有再使用缓慢的 Hive+MapReduce批处理,而是经过使用与商用并行关系数据库中相似的分布式查询引擎(由Query Planner、Query Coordinator和
Query Exec Engine三部分组成),能够直接从HDFS或HBase中用SELECT、JOIN和统计函数查询数据,从而大大下降了延迟。
因为impala是基于hive的,impala表的元数据信息依然存储在Hive Metastore中;
Statestore Daemon:java
该进程负责搜集集群中Impalad进程节点的健康情况,它经过建立多个线程来处理Impalad的注册订阅,并与各节点保持心跳链接,不断地将健康情况的结果转发给全部的
Impalad进程节点。一个Impala集群只需一个statestored进程节点,当某一节点不可用时,该进程负责将这一信息传递给全部的Impalad进程节点,再有新的查询时不会把请
求发送到不可用的Impalad节点上。
statestored也是容许挂掉的,不会影响集群运行,由于impalad节点之间也会保持通讯,可是当statestored和某一部分impalad都挂掉了,就会出问题,由于没有了statestored,
而impalad节点之间并不能识别出是否有某些impalad挂了,依然会与挂掉的impalad通讯,此时就会出问题;
把impala表的metadata分发到各个impalad 中,说他是基于hive 的,因此就须要metadata数据分到impalad 中,之前没有此进程,就是手动来进行同步的。虽然以后加入了,
可是也没有那么智能,并非保证全部的数据都能同步,好比你插入一些数据,他能够把数据发到其余节点,可是好比建立表ddl 语句,建议去手动作一下。接收来自
statestore 的全部请求,当impala deamon节点插入或者查询数据时候(数据改变的时候),他把本身的操做结果汇报给state deamon,而后state store 请求catelog deamon,告知重
新更新元数据信息给impalad 中,因此catalog deamon 与statedeamon 放到一台机器上,并且不建议在此机器上再去安装impala deamon 进程,避免形成提供查询形成集群管
理出问题;
Impala Daemon:web
与DataNode运行在同一节点上,是Impala的核心组件,在每一个节点上这个进程的名称为Impalad。该进程负责读写数据文件;接受来自Impala-shell、Hue、JDBC、ODBC等客
户端的查询请求(接收查询请求的Impalad为Coordinator),Coordinator经过JNI调用java前端解释SQL查询语句,生成查询计划树,再经过调度器把执行计划分发给具备相应
数据的其它节点分布式并行执行,并将各节点的查询结果返回给中心协调者节点Coordinator,再由该节点返回给客户端。同时Impalad会与State Store保持通讯,以了解其
他节点的健康情况和负载。
Impalad 里面的三个组件:算法
impalad:
impala statestore 和catalog server两个角色,就具有集群调节的功能;
真正的工做就是在impalad节点上,客户端执行查询的时候能够选一个impalad节点来执行,此时这个节点的内存要配置大一些,由于最后要汇总查询结果;
当选定impalad节点后,此节点上的Query coordinato进程会进行协调,找到与此查询相关的数据块在哪些机器节点上,而后由每一个节点的Query executor进程负责查询;
也能够写一个轮询或者权重算法,当有查询任务时,负载到一批impalad节点上,解决高并发问题;
Query planner(查询解析器):
接收来自SQL APP和ODBC等的查询,而后将查询转换为许多子查询(执行计划),至关于一个代理;
Query coordinator(中心协调节点):
将这些子查询分发到各个节点上
Query executor(查询执行器):
真正负责子查询的执行,而后返回子查询的结果,这些中间结果通过汇集以后最终返回给用户。
3、impala安装sql
安装就不说了,对于熟悉CDH的朋友来讲,是很简单的,彻底图形化操做;shell
通常有两种方式:数据库
一、cloudermanager安装(建议)apache
方便、快捷安全
二、手动安装(不建议)
没试过,估计有坑
4、impala shell
外部shell:
外部shell也就是在Linux命令行里配合"impala-shell"命令使用的; -h (--help) 帮助 -v (--version) 查询版本信息-V(--verbose) 启用详细输出 --quiet 关闭详细输出 -p 显示执行计划 -i hostname(--impalad=hostname) 指定链接主机 格式hostname:port 默认端口21000 -r(--refresh_after_connect)刷新全部元数据,全量刷新,不太建议使用,当数据量大的时候很慢,还可能致使某些节点出问题。 -q query(--query=query) 从命令行执行查询,不进入impala-shell -d default_db(--database=default_db) 指定数据库 -B(--delimited)去格式化输出 --output_delimiter=character 指定分隔符 --print_header 打印列名 -f query_file(--query_file=query_file)执行查询文件,也就是执行SQL文件,文件内容以分号分隔 -o filename(--output_file filename) 结果输出到指定文件 -c 查询执行失败时继续执行,也就是跳过失败的sql语句 -k(--kerberos) 使用kerberos安全加密方式运行impala-shell -l 启用LDAP认证 -u 启用LDAP时,指定用户名Impala Shell
内部shell:
内部sell,也就是使用“impala-shell”命令链接进impala后使用的; help 帮助选项 connect <hostname:port> 链接到某个impalad 实例,默认端口21000 refresh <tablename> 增量刷新元数据库 invalidate metadata 全量刷新元数据库,性能消耗较大 explain <sql> 显示查询执行计划、步骤信息 set explain_level 设置显示级别( 0,1,2,3),越高信息越详细 shell <shell> 不退出impala-shell执行Linux命令 impala>shell ls /home profile (查询完成后执行) 查询最近一次查询的底层信息
5、web监控
impala提供了StateStore和Catalog进程的web监控页面;
StateStore:
http://ip:25020
Catalog:
http://ip:25010