欢迎来到天天文库
浏览记录
ID:40920768
大小:268.58 KB
页数:12页
时间:2019-08-10
《大数据分析查询引擎Impala》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。在介绍Impala之前需要先介绍Google的Dremel系统,因为Impala最开始是参照Dremel系统进行设计的。Dremel是Google的交互式数据分析系统,它构建于Google的GFS(GoogleFileSystem)等系
2、统之上,支撑了Google的数据分析服务BigQuery等诸多服务。Dremel的技术亮点主要有两个:一是实现了嵌套型数据的列存储;二是使用了多层查询树,使得任务可以在数千个节点上并行执行和聚合结果。列存储在关系型数据库中并不陌生,它可以减少查询时处理的数据量,有效提升查询效率。Dremel的列存储的不同之处在于它针对的并不是传统的关系数据,而是嵌套结构的数据。Dremel可以将一条条的嵌套结构的记录转换成列存储形式,查询时根据查询条件读取需要的列,然后进行条件过滤,输出时再将列组装成嵌套结构的记录输出,记录的正向和反向转换都通过高效的状态机实现。另外,Dremel的
3、多层查询树则借鉴了分布式搜索引擎的设计,查询树的根节点负责接收查询,并将查询分发到下一层节点,底层节点负责具体的数据读取和查询执行,然后将结果返回上层节点。Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具,Impala没有再使用缓慢的Hive+MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎(由QueryPlanner、QueryCoordinator和QueryExecEngine三部分组成),可以直接从HDFS或HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低
4、了延迟。Impala其实就是Hadoop的Dremel,Impala使用的列存储格式是Parquet。Parquet实现了Dremel中的列存储,未来还将支持Hive并添加字典编码、游程编码等功能。Impala的系统架构如图所示。Impala使用了Hive的SQL接口(包括SELECT、INSERT、Join等操作),但目前只实现了Hive的SQL语义的子集(例如尚未对UDF提供支持),表的元数据信息存储在Hive的Metastore中。StateStore是Impala的一个子服务,用来监控集群中各个节点的健康状况,提供节点注册、错误检测等功能。Impala在每个节
5、点运行了一个后台服务Impalad,Impalad用来响应外部请求,并完成实际的查询处理。Impalad主要包含QueryPlanner、QueryCoordinator和QueryExecEngine三个模块。QueryPalnner接收来自SQLAPP和ODBC的查询,然后将查询转换为许多子查询,QueryCoordinator将这些子查询分发到各个节点上,由各个节点上的QueryExecEngine负责子查询的执行,最后返回子查询的结果,这些中间结果经过聚集之后最终返回给用户。Impala主要由Impalad,StateStore和CLI组成。Impalad与D
6、ataNode运行在同一节点上,由Impalad进程表示,它接收客户端的查询请求(接收查询请求的Impalad为Coordinator,Coordinator通过JNI调用java前端解释SQL查询语句,生成查询计划树,再通过调度器把执行计划分发给具有相应数据的其它Impalad进行执行),读写数据,并行执行查询,并把结果通过网络流式的传送回给Coordinator,由Coordinator返回给客户端。同时Impalad也与StateStore保持连接,用于确定哪个Impalad是健康和可以接受新的工作。在Impalad中启动三个ThriftServer:beesw
7、ax_server(连接客户端),hs2_server(借用Hive元数据),be_server(Impalad内部使用)和一个ImpalaServer服务。每个impalad实例会接收、规划并调节来自ODBC或ImpalaShell等客户端的查询。每个impalad实例会充当一个Worker,处理由其它impalad实例分发出来的查询片段(queryfragments)。客户端可以随便连接到任意一个impalad实例,被连接的impalad实例将充当本次查询的协调者(Ordinator),将查询分发给集群内的其它impalad实例进行并行计算。当所
此文档下载收益归作者所有