http://shiyanjun.cn/archives/507.html
我们知道,在实时性要求不是很高的应用场景中,比如,月度统计报表生成等,我们基于传统的Hadoop MapReduce来处理海量大数据(包括使用Hive),在各方面表现都还不错,只需要离线处理数据,然后存储结果即可。但是如果在一些实时性要求相对较高的应用场景中,哪怕处理时间能够在原有的基础有大幅度地减少,也能很好地提升用户体验。对于大数据的实时性要求,其实是相对的,比如,传统使用MapReduce计算框架处理PB级别的查询分析请求,可能耗时30分钟甚至更多,但是如果能够使这个延迟大大降低,如3分钟计算出结果,这是很令人震撼的。Impala就是基于这样的需求驱动而出现的。
Impala是Cloudera开发的一款用来进行大数据实时查询分析的开源工具,它能够实现通过我们熟悉的传统关系数据库的SQL风格来操作大数据,数据可以是存储到HDFS或HBase中的。
下面,我们从不同的角度来认识和理解Cloudera Impala:
设计目标
官网给出的介绍是,使用Impala来实现SQL on Hadoop,实现对海量数据的实时查询分析,它的优势有如下几点:
- 快速
可以方便地执行SQL语句,在数秒内返回查询分析结果。
这一点,其实还要依赖于你在HDFS或HBase上存储的数据的规模,依赖于你对Impala系统的配置调优情况,可能还依赖于你写的SQL语句的执行效率。
- 灵活
可以直接查询存储在HDFS上的原生数据,也可以查询经过优化设计而存储的数据,只要数据的格式它们能够兼容MapReduce、Hive、Pig等等。
- 整合&开放
可以非常容易地与Hadoop系统整合,并使用Hadoop生态系统的资源和优势,也不需要将数据迁移到特定的存储系统就能满足查询分析的要求。
- 可伸缩性
可以很好地与一些BI应用系统协同工作,如Microstrategy、Tableau、Qlikview,等等。
支持特性
Impala支持的特性,主要包括如下几点:
- 对 ANSI-92 SQL标准的支持
Impala支持ANSI-92 SQL所有子集,包括CREATE、ALTER、SELECT、INSERT、JOIN、GROUP BY以及子查询。它还支持分区JOIN、常用的聚合函数(SUM、COUNT、MAX、MIN、AVG等等)、topN查询。你使用这些语句时,可以像使用关系数据库中使用的SQL语句一样去设计,很容易上手。
- 数据来源与数据格式
Impala可以操作HDFS、HBase中存储的数据,支持如下HDFS的支持文件格式:Text file、SequenceFile、RCFile、Avro file、Parquet,支持的压缩格式有:Snappy、GZIP、Deflate、BZIP,其中Snappy压缩格式的性能更好一些。
- 支持的数据访问接口
主要包括Hive所支持的如下接口:JDBC Driver、ODBC Driver、Hue Beeswax、Cloudera Impala Query UI.,另外,还可以通过CLI接口(也就是Impala Shell)访问。
架构设计要点
Impala的架构设计视图,如图所示:
上面可以看出,位于Datanode上的每个impalad进程,都具有Query Planner、Query Coordinator、Query Exec Engine这几个组件,每个Impala节点在功能集合上是对等的,也就是说,任何一个节点都能接收外部查询请求。当有一个节点发生故障后,其他节点仍然能够接管,这还要得益于,在HDFS上,数据的副本是冗余的,只要数据能够取到,某些挂掉的impalad进程所在节点的数据,在整个HDFS中只要还存在副本(impalad进程正常的节点),还是可以提供计算的。除非,当多个impalad进程挂掉了,恰好此时的查询请求要操作的数据所在的节点,都没有存在impalad进程,这是肯定是无法计算了。
Cloudera Impala在实际应用场景中所处的位置,如图所示:
上图展示了Impala方案的相关的各种组件,简单说明如下:
- 客户端
有三类客户端可以与Impala进行交互:基于驱动程序的客户端(ODBC Driver和JDBC Driver,其中JDBC Driver支持Hive1与Hive2风格的驱动形式);Hue接口,可以通过Hue Beeswax接口来与Impala进行交互;Impala Shell命令行接口,类似关系数据库提供一些命令行即可,可以直接使用SQL语句与Impala交互。
- Hive Metastore
Impala使用Hive Metastore来存储一些元数据,为Impala所使用,通过存储的元数据,Impala可以更好地知道整个集群中数据以及节点的状态,从而实现集群并行计算,对外部提供查询分析服务。
- Cloudera Impala
Impala会在HDFS集群的Datanode上启动进程,协调位于集群上的多个Impala进程(impalad),以及执行查询。在Impala架构中,每个Impala节点都可以接收来自客户端的查询请求,然后负责解析查询,生成查询计划,并进行优化,协调查询请求在其他的多个Impala节点上并行执行,最后有负责接收查询请求的Impala节点来汇总结果,响应客户端。
- HBase和HDFS
HBase和HDFS存储着实际需要查询的大数据。
总结
Cloudera官网所言,使用Impala比使用Hive能提高3~90的效率,我们可以参考Cloudera的官网博客。我相信,使用Impala比使用Hive能大大提升计算性能,这是真实的。Impala从发布到现在也不过一年左右时间,它还在发展之中,能有这样的表现我还是感觉很欣慰,至少让我们看到了一些商业系统能够实现的功能已经在开源项目中落地。
在我们使用Impala的过程中,我总结一下遇到的相关问题:
- SQL解析
我发现Impala目前在SQL解析方面还有优化的余地,当前的问题,一个是SQL解析速度很慢,另一个是如果SQL比较复杂的话存在硬解析的问题,非常耗时。虽然和现在更加成熟的关系数据库Oracle、MySQL等还有一定差距,但是我相信这些只是时间问题。
- 稳定性
可能是因为依赖于Hive的原因,通过Thrift接口来与后端进行交互,并发性比较差。当并发稍微高一点点的时候,就会出现impalad进程挂掉的问题,有时候可能还会出现类似的僵尸进程。
参考链接
- http://www.cloudera.com/content/cloudera-content/cloudera-docs/Impala/latest/Installing-and-Using-Impala/ciiu_concepts.html
- http://www.cloudera.com/content/cloudera-content/cloudera-docs/Impala/latest/Installing-and-Using-Impala/ciiu_processes.html
- http://www.cloudera.com/content/cloudera-content/cloudera-docs/Impala/latest/Installing-and-Using-Impala/Installing-and-Using-Impala.html
- http://www.cloudera.com/content/cloudera/en/campaign/introducing-impala.html
- http://blog.cloudera.com/blog/2012/10/cloudera-impala-real-time-queries-in-apache-hadoop-for-real/
- http://www.cloudera.com/content/cloudera-content/cloudera-docs/Impala/latest/Cloudera-Impala-Frequently-Asked-Questions/Cloudera-Impala-Frequently-Asked-Questions.html
- http://www.cloudera.com/content/cloudera-content/cloudera-docs/Impala/latest/Cloudera-Impala-Release-Notes/cirn_new_features.html?scroll=new_features
- http://blog.cloudera.com/blog/2013/02/inside-cloudera-impala-runtime-code-generation/
相关推荐
综上所述,Cloudera Impala是一个针对Hadoop设计的实时查询系统,通过提供交互式SQL和并行处理能力,显著提升了大数据查询的效率。同时,尽管标签中包含了“Python”,但Python在Impala中的角色更多是作为辅助工具,...
Cloudera Impala is an open source project that is opening up the Apache Hadoop software stack to a wide audience of database analysts, users, and developers. The Impala massively parallel processing ...
#### 六、Impala 架构详解 - **Impala 守护进程 (Impalad)**: 运行在每个节点上的核心组件,负责读写数据、接收命令、并行化查询等。 - **Impala Statestore**: 监控集群状态,确保节点间的通信正常。 - **Impala ...
- **MPP 架构**:Impala 基于大规模并行处理 (MPP) 架构设计,能够将查询任务并行地分发到集群中的多个节点上执行。每个节点只处理其本地的数据子集,然后将结果合并,这种方式极大地提高了查询效率。 - **SQL 支持*...
### Cloudera Impala:高性能实时查询引擎 #### 引言 Cloudera Impala 是一款由 Cloudera 开发的高性能分布式 SQL 查询系统,它为大数据提供了接近于传统数据库性能的速度,同时保持了 Hadoop 的扩展性和灵活性。...
Cloudera Impala ODBC Connector 2.5.36 for windows 32bit
该文档来自2013中国大数据技术大会,秒针技术经理讲师刘诚忠在大数据技术论坛的演讲。刘诚忠分享了选择Cloudera Impala作为Camaro开发基础的原因,详细介绍了Camaro的功能,并对其未来功能进行了展望。
标题中的"cloudera-hive/impala-odbc"指的是Cloudera提供的Hive和Impala的ODBC(Open Database Connectivity)驱动程序。ODBC是用于在不同数据库系统之间建立连接的标准接口,使得应用程序可以访问多种类型的数据库...
该文档来自2013中国大数据技术大会,巨杉数据库CTO王涛在大数据技术论坛的演讲。王涛对基于Cloudera Impala的非关系型数据库SQL执行引擎SequoiaSQL的架构、功能、性能指标等方面进行了介绍。
标题中的“Impala的JDBC编程驱动”指的是Impala(一个开源的、高性能的SQL查询引擎,用于处理存储在Hadoop集群中的数据)与Java应用程序之间的桥梁,即JDBC(Java Database Connectivity)驱动。JDBC驱动是Java...
ImpalaJDBC41是Cloudera提供的一种用于交互式查询和分析大数据的关键组件,它基于Java Database Connectivity (JDBC) 标准,允许应用程序与Cloudera Impala进行通信。Impala是一款高性能、低延迟的SQL查询引擎,专为...
Cloudera Impala是一款开源的、MPP(大规模并行处理)查询引擎,专为在Hadoop生态系统中进行实时分析而设计。它与HDFS(Hadoop分布式文件系统)和HBase等存储系统紧密集成,提供了快速的SQL查询能力,适用于大数据...
Impala 驱动包 Cloudera_ImpalaJDBC4_2.5.41.zip Cloudera_ImpalaJDBC41_2.5.41.zip Cloudera-JDBC-Driver-for-Impala-Install-Guide.pdf Cloudera-JDBC-Driver-for-Impala-Release-Notes.pdf
大数据管理与监控:Cloudera Manager:Impala实时查询引擎使用.docx
#RImpala RImpala 是一个 R 包,可帮助您使用 Cloudera Impala 连接和执行分布式查询。 Impala 支持 jdbc 集成,RImpala 使用此功能在 R 和 Impala 之间建立连接。 ##安装 RImpala 要使用此程序包,您还必须有权访问...
Cloudera JDBC Driver for Impala 是一款专门为连接Cloudera Data Hub (CDH) 中的Impala服务设计的Java数据库连接器(JDBC)驱动。这个驱动程序允许开发者和数据分析师使用标准的JDBC接口来与Impala进行交互,从而在...
Impala是Cloudera公司推出的一种开源、分布式SQL查询引擎,设计用于处理大规模数据集。它与Hadoop生态系统紧密集成,可以直接查询存储在HDFS(Hadoop Distributed File System)和HBase上的数据,而无需先将其转换为...
Impala是Cloudera公司开发的一种高性能、实时分析数据库,它是Apache Hadoop生态系统的一部分,专为大规模数据仓库和在线分析处理(OLAP)工作负载设计。JDBC(Java Database Connectivity)驱动则是连接数据库的一...
### Cloudera平台部署架构建议 #### 一、概述 Cloudera平台是业界领先的开源大数据解决方案之一,它集成了大量的大数据技术栈,为用户提供了一站式的数据分析与处理能力。本文将详细介绍Cloudera平台的软件体系...