Impala技术原理
Posted Hadoop大数据之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Impala技术原理相关的知识,希望对你有一定的参考价值。
Impala提高了Apache Hadoop上SQL查询性能,同时保留了熟悉的用户体验,Impala可以通过select、join和聚合函数实时查询存储在HDFS/Hbase上的数据,Impala可使用Hive的元数据、Hive SQL语法、ODBC驱动程序和用户界面,为面向批处理、实时查询提供一个熟悉和统一的平台(出于这个原因,Hive用户可以通过设置更少的资源开销来使用Impala)。摘自官网:http://impala.apache.org/overview.html
一、Impala整体架构
为了避免延迟,Impala绕过MapReduce通过专门的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分组成)直接访问数据,这与商业并行RDBMS中的数据库非常相似,其查询性能比Hive更快,是一个实时SQL查询引擎。
Impala主要由Impalad、State Store&Catalog和CLI组成。
Impala Daemon:与DataNode运行在同一节点上,由Impalad进程表示,都具有Query Planner、Query Coordinator、 Query Exec Engine三个组件。任何一个节点都能够接收客户端的查询请求(接收查询请求的Impalad为协调者,协调者通过JNI调用Java前端解释SQL查询语句,生成查询计划树,再通过调度器把执行计划分发给具有相应数据的其它Impalad进行执行),读写数据并行执行查询,把结果通过网络流式传送回协调者,由协调者返回给客户端。同时Impalad也与State Store保持连接,用于确定是可以工作的。在Impalad中启动三个ThriftServer:beeswax_server(连接客户端)、hs2_server(借用Hive元数据)、be_server(Impalad内部使用)和一个ImpalaServer服务。
Impala State Store:跟踪集群中的Impalad的健康状态及位置信息,由statestored进程表示,它通过创建多个线程来处理Impalad的注册订阅和与各个Impalad保持心跳连接,各Impalad都会缓存一份State Store中的信息,当State Store离线后(Impalad发现State Store处于离线时,会进入recovery模式,反复注册,当State Store重新加入集群后,自动恢复正常,更新缓存数据),因为Impalad有State Store的缓存仍然可以工作,但会因为有些Impalad失效了,而已缓存数据无法更新,导致把执行计划分配给了失效的Impalad,导致查询失败。
Impala Catalog:服务将SQL语句做出的元数据变化通知给集群的各个节点,catalog服务的物理进程名称是catalogd。由于它的请求会跟statestore daemon交互,所以最好让statestored和catalogd两个进程在同一个节点上。Impala 1.2中加入的catalog服务减少了refresh和invalidate metadata语句的使用。需要注意的是,通过Impala执行的操作带来的元数据变化,有了catalog就不需要再执行refresh和invalidate metadata,但如果是通过Hive进行的建表、加载数据,则仍然需要执行refresh和invalidate metadata来通知Impala更新元数据信息。
CLI:提供给用户查询使用的命令行工具(Impala Shell),同时Impala还提供了Hue、JDBC、ODBC使用接口。
二、与Hive的关系
1)Impala支持的文件格式及压缩编码
文件类型 | 文件格式 | 压缩编码 | CREATE? | INSERT? |
Parquet | 结构化 | Snappy GZIP |
能 | 能 |
Text | 非结构化 | LZO | 能。 如果建表是没有指定存储类型,默认采用未压缩的text,字段由ASCII编码的0x01字符串分割。 |
能。 如果使用了LZO压缩,则只能通过Hive建表和插入数据。 |
Avro | 结构化 | Snappy GZIP Deflate BZIP2 |
在Impala 1.4.0或更高版本上支持,之前的版本只能通过Hive来建表 | 不能。 只能通过load data的方式将已经转换好格式的数据加载进去,或者使用Hive来插入数据。 |
RCFile | 结构化 | Snappy GZIP Deflate BZIP2 |
能 | 不能。 只能通过load data的方式将已经转换好格式的数据加载进去,或者使用Hive来插入数据。 |
SequenceFile | 结构化 | Snappy GZIP Deflate BZIP2 |
能 | 不能。 只能通过load data的方式将已经转换好格式的数据加载进去,或者使用Hive来插入数据。 |
2)Impala与Hive共同之处
Hive适合于长时间的批处理分析,而Impala适合于实时交互式查询,可以先使用Hive进行数据转换处理,之后使用Impala在Hive处理后的结果数据集上进行快速的数据分析。
3)Impala查询处理流程
4)Impala为什么比Hive速度快
真正的MPP查询引擎,不是MapReduce;在执行SQL语句时,Impala不会把中间数据写入到磁盘,而是在内存中完成所有处理;使用Impala时,查询任务会马上执行而不是产生MapReduce任务,这会节约大量的初始化时间;智能的算法在多节点分布式执行各个查询步骤,同时避免了sorting和shuffle这两个耗时的阶段;Impala为每个查询产生汇编级的代码,在内存中运行的执行效率更高。
以上是关于Impala技术原理的主要内容,如果未能解决你的问题,请参考以下文章