Hadoop是一个能够对大量数据进行分布式处理的软件框架。具有可靠、高效、可伸缩的特点。
-
HDFS:全称为Hadoop分布式文件系统(Hadoop Distributed File System),提供了高吞吐量的访问应用程序数据。
-
Hadoop YARN:Hadoop集群资源管理框架(Yet Another Resource Negotiator),用于作业调度和集群资源管理。
-
Hadoop MapReduce:基于YARN的大数据集的并行处理系统。
-
Hadoop Common:支持其他Hadoop模块的通用功能,包括序列化、Java RPC和持久化数据结构等。
-
Ambari:是一个部署、管理和监视Apache Hadoop集群的开源框架。
-
Hbase:可扩展的分布式列式数据库,支持大表的结构化存储。
-
Hive:分布式数据仓库系统,提供基于类SQL的查询语言。
-
Storm :Twitter开源的分布式实时大数据处理框架,最早开源于github,从0.9.1版本之后,归于Apache社区,被业界称为实时版Hadoop。
-
Impala:是由Cloudera公司开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase上的PB级大数据,在性能上比Hive高出3~30倍。
-
Mathout:机器学习和数据挖掘领域经典算法的实现。
-
Pig:一个高级数据流语言和执行环境,用来检索海量数据集。
-
Spark:一个快速和通用的计算引擎。Spark提供了一个简单而富有表现力的编程模型,支持多种应用,包括ETL、机器学习、数据流处理和图形计算。
-
Sqoop:在关系型数据库与Hadoop系统之间进行数据传输的工具。
-
Tez:是从MapReduce计算框架演化而来的通用DAG计算框架,可作为MapReduce/Pig/Hive等系统的底层数据处理引擎,它天生融入Hadoop2.0的资源管理平台YARN。
-
Zookeeper:提供Hadoop集群高性能的分布式的协调服务。
以下就Impala展开进行详解。
一、Impala简介
Hive在查询数据的时候,采用了MapReduce执行框架。由于MapReduce本身具有较高的延迟,因此在利用MapReduce执行Hive查询时,延时比较长。为了提升查询速度解决Hadoop批处理延迟问题,Cloudera公司发布了Impala实时查询引擎。Impala是基于MPP的SQL查询系统,可以直接为存储在HDFS或HBase中的Hadoop数据提供快速、交互式的SQL查询。
Impala和Hive一样也使用了相同的元数据、SQL语法(Hive SQL)、ODBC驱动和用户接口(Hue Beeswax),这就很方便地为用户提供了一个相似并且统一的平台来进行批量或实时查询。
Impala是由Cloudera公司开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase上的PB级大数据,在性能上比Hive高出3~30倍。Impala的运行需要依赖于Hive的元数据。Impala是参照 Dremel系统进行设计的。
Impala采用了与商用并行关系数据库类似的分布式查询引擎,可以直接与HDFS和HBase进行交互查询。
Impala和Hive采用相同的SQL语法、ODBC驱动程序和用户接口。
二、Impala系统架构
Impala主要包括以下组成部分。
Impala shell:客户端工具,提供一个交互接口ODBC,供使用者连接到Impalad发起数据查询或管理任务等。
Impalad:分布式查询引擎,由Query Planner、Query Coordinator和Query Exec Engine三部分组成,可以直接从HDFS或者HBase中用SELECT、JOIN和统计函数查询数据。
State Store:主要跟踪各个Impalad实例的位置和状态,让各个Impalad实例以集群的方式运行起来。
Catalog Service:主要跟踪各个节点上对元数据的变更操作,并且通知到每个节点。
Impala支持以下特性:
-
支持ANSI-92 SQL所有子集,包括CREATE、ALTER、SELECT、INSERT、JOIN和subqueries;
-
支持分区join、完全分布式聚合以及完全分布式top-n查询;
-
支持多种数据格式,如Hadoop原生格式(pache Avro、SequenceFile、RCFile with Snappy、GZIP、BZIP或未压缩)、文本(未压缩或者LZO压缩)和Parquet(Snappy或未压缩)。
-
可以通过JDBC、ODBC、Hue GUI或者命令行shell进行连接。
三、Impala查询执行过程
-
第0步,当用户提交查询前,Impala先创建一个负责协调客户端提交的查询的Impalad进程,该进程会向Impala State Store提交注册订阅信息,State Store会创建一个statestored进程,statestored进程通过创建多个线程来处理Impalad的注册订阅信息。 -
第1步,用户通过CLI客户端提交一个查询到impalad进程,Impalad的Query Planner对SQL语句进行解析,生成解析树;然后,Planner把这个查询的解析树变成若干PlanFragment,发送到Query Coordinator. -
第2步,Coordinator通过从MySQL元数据库中获取元数据,从HDFS的名称节点中获取数据地址,以得到存储这个查询相关数据的所有数据节点。 -
第3步,Coordinator初始化相应impalad上的任务执行,即把查询任务分配给所有存储这个查询相关数据的数据节点。 -
第4步,Query Executor通过流式交换中间输出,并由Query Coordinator汇聚来自各个impalad的结果。 -
第5步,Coordinator把汇总后的结果返回给CLI客户端。
四、Impala与Hive的关系
Impala与Hive都是构建在Hadoop之上的数据查询工具。从客户端使用来看,Impala与Hive有很多的共同之处,如数据表元数据、ODBC/JDBC驱动、SQL语法、灵活的文件格式、存储资源池等。Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询。Impala给数据分析人员提供了快速实验、验证想法的大数据分析工具。
Hive与Impala的不同点总结如下:
-
Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询。 -
Hive依赖于MapReduce计算框架,Impala把执行计划表现为一棵完整的执行计划树,直接分发执行计划到各个Impalad执行查询。 -
Hive在执行过程中,如果内存放不下所有数据,则会使用外存,以保证查询能顺序执行完成,而Impala在遇到内存放不下数据时,不会利用外存,所以Impala目前处理查询时会受到一定的限制。
Hive与Impala的相同点总结如下:
-
Hive与Impala使用相同的存储数据池,都支持把数据存储于HDFS和HBase中。 -
Hive与Impala使用相同的元数据。 -
Hive与Impala中对SQL的解释处理比较相似,都是通过词法分析生成执行计划。
五、Impala应用场景
Impala基于MPP的SQL查询系统,可以直接为存储在HDFS或HBase中的Hadoop数据提供快速、交互式的SQL查询。与Hive相比,Impala中间结果不写磁盘,而是通过网络和stream的方式传递,能最大地使用内存。Impala支持多种存储格式,有着更好的IO调度和执行效率。
Impala的应用场景应满足如下条件:
首页>


粤公安备案 44010602008731号