Impala,Hive,Hbase,关系数据库区别
Impala简介
Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。
已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。
相比之下,Impala的最大特点也是最大卖点就是它的快速。
Impala特性
a.没有使用MapReduce作为底层执行计算框架,虽然MapReduce是非常好的并行计算框架,但它更多地是面向批处理模式,而不是面向交互式的SQL执行模式。
b.与MapReduce相比Impala将整个查询分成一批查询计划树,而不是一连串的MapReduce执行任务,在将查询计划分发之后,Impala采用拉链式的方式拉取计算结果,把结果数据组成执行树并进行流式传递汇集。减少了把中间结果写入磁盘的步骤,最后有从磁盘读取数据的开销。即相比没有了hive中mapreduce的启动时间。Impala的数据执行模式没有像Hive那样map->shuffle->reduce模式来处理数据保证了Impala的并发性和避免了中间过程中不必要的sort和shuffle。
关系数据库和Impala
Impala使用类似于SQL和HiveQL的Query语言。 下表描述了SQL和Impala查询语言之间的一些关键差异。
Impala | 关系型数据库 |
---|---|
Impala使用类似于HiveQL的类似SQL的查询语言。 | 关系数据库使用SQL语言。 |
在Impala中,您无法更新或删除单个记录。 | 在关系数据库中,可以更新或删除单个记录。 |
Impala不支持事务。 | 关系数据库支持事务。 |
Impala不支持索引。 | 关系数据库支持索引。 |
Impala存储和管理大量数据(PB)。 | 与Impala相比,关系数据库处理的数据量较少(TB)。 |
Impala与hive相同点
1.数据储存:使用相同的数据存储池,都可以将数据的储存在HDFS或HBase中。
2.元数据:两者使用相同的元数据
3.SQL解释处理:比较相似的就是都是通过词法分析生成执行计划。
4.查询计划树
不同点
1.执行计划
hive依赖于MapReduce执行框架,执行计划分成map->shuffle-reduce->…的模型。如果是一个Query则会有跟多的写中间结果,由于MapReduce的执行特点,MapReudce任务的开启过程会增加过多的时间
Impala将执行计划表现为一颗完整的执行计划树,Impala将所有的执行计划分发到Impala进行查询执行,避免了MR中sort和shuffle过程中的时间浪费。
2.数据流
hive:采用push推的方式,将每次计算的结果都push达到下一个节点。
Impala:采用pull拉取的方式,将本节点需要的结果从上一个节点执行完的结果中进行pull拉取。
3.内存使用
Hive: 在执行过程中如果内存放不下所有数据,则会使用外存,以保证Query能顺序执行完。每一轮MapReduce结束,中间结果也会写入HDFS中,同样由于MapReduce执行架构的特性,shuffle过程也会有写本地磁盘的操作。
Impala: 在遇到内存放不下数据时,当前版本0.1是直接返回错误,而不会利用外存,以后版本应该会进行改进。这使用得Impala目前处理Query会受到一定的限制,最好还是与Hive配合使用。Impala在多个阶段之间利用网络传输数据,在执行过程不会有写磁盘的操作(insert除外)
4.调度
hive任务调度依赖于hadoop的调度策略
Impala调度由自己完成,目前只有一种调度器,simple schedule,它会尽量满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的节点服务器。调度器目前还比较简单,在Simple Scheduler::GetBackend中可以看到,现在还没有考虑负载,网络IO状况等因素进行调度。但目前Impala已经有对执行过程的性能统计分析,应该以后版本会利用这些统计信息进行调度吧。
5.容错
Hive依赖于Hadoop的容错能力。
Impalad:在查询过程中,没有容错逻辑,如果在执行过程中,发生故障,则直接返回错误(这与Impalad的设计有关,因为Impala定位于实时查询,一次查询失败,再查询一次就好,再查一次的成本很低)。但从整体来看,Impala是能很好的容错,所有的Impalad是对等的结构,用户可以向任何一个Impalad提交查询,如果一个Impalad失效,其上正在运行的所有Query都将失败,但用户可以重新提交查询由其它Impalad代替执行,不会影响服务。对于State Store目前只有一个,但当State Store失效,也不会影响服务,因为每个Impala都同步了State store的信息。只是不能再次更新集群的状态了。有可能会将执行计划分配给已经失效的Impalad执行。
6.适用场景
Hive:复杂的批处理查询任务,数据转换任务。
Impala:实时数据分析,因为不支持UDF,能处理的问题有一定的限制,与Hive配合使用,对Hive的结果数据集进行实时分析。
Hive,Hbase和Impala
HBase | Hive | Impala |
---|---|---|
HBase是基于Apache Hadoop的宽列存储数据库。 它使用BigTable的概念。 | Hive是一个数据仓库软件。 使用它,我们可以访问和管理基于Hadoop的大型分布式数据集。 | Impala是一个管理,分析存储在Hadoop上的数据的工具。 |
HBase的数据模型是宽列存储。 | Hive遵循关系模型。 | Impala遵循关系模型。 |
HBase是使用Java语言开发的。 | Hive是使用Java语言开发的。 | Impala是使用C ++开发的。 |
HBase的数据模型是无模式的。 | Hive的数据模型是基于模式的。 | Impala的数据模型是基于模式的。 |
HBase提供Java,RESTful和Thrift API。 | Hive提供JDBC,ODBC,Thrift API。 | Impala提供JDBC和ODBC API。 |
支持C,C#,C ++,Groovy,Java PHP,Python和Scala等编程语言。 | 支持C ++,Java,PHP和Python等编程语言。 | Impala支持所有支持JDBC / ODBC的语言。 |
HBase提供对触发器的支持。 | Hive不提供任何触发器支持。 | Impala不提供对触发器的任何支持。 |
所有这三个数据库 -
-
是NOSQL数据库。
-
可用作开源。
-
支持服务器端脚本。
-
按照ACID属性,如Durability和Concurrency。
-
使用分片进行分区。
Impala的优缺点
优点
1.支持JDBC/ODBC远程访问,支持SQL查询,快速查询大数据。
2.无需转换为MR,直接读取HDFS数据。
3.支持Data Local,可以对已有数据进行查询,减少数据的加载,转换。
4.支持列式存储,多种存储格式可以选择(Parquet, Text, Avro, RCFile, SequeenceFile)。
5.可以与Hive配合使用,兼容HiveSQL, 可对hive数据直接做数据分析。
6.基于内存进行计算,能够对PB级数据进行交互式实时查询、分析。
缺点
1.不支持用户定义函数UDF。
2.不支持text域的全文搜索。
3.不支持Transforms。
4.不支持查询期的容错。(发生故障,则直接返回错误)
5.对内存要求高。
6.完全依赖于hive。
7.实践过程中 分区超过1w 性能严重下降。
8.Impala不提供任何对序列化和反序列化的支持。
9.Impala只能读取文本文件,而不能读取自定义二进制文件。
10.每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新。