0


Impala 与 Hive 的比较

Impala 与 Hive 的关系

impala是基于hive的大数据分析查询引擎,直接使用hive的元数据库metadata,意味着impala元数据都存储在hive的metastore当中,并且impala兼容hive的绝大多数sql语法。所以需要安装impala的话,必须先安装hive,保证hive安装成功,并且还需要启动hive的metastore服务。

Hive元数据包含用Hive创建的database、table等元信息。元数据存储在关系型数据库中,如Derby、MySQL等。

客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。

nohup hive --service metastore >> ~/metastore.log 2>&1 &

功能和hive类似

由于hive特性,数据查询慢,Impala查询效果和查询效率比HIve更高

类似于MySQL等关系型数据库,可以实现实时查询

Impala是依托于HIve的,其中Hive进行数据预处理,Impala实现实时查询(Impala的元数据用的是HIve的元数据)

Impala 与 Hive 的异同

相同点

数据存储:使用相同的存储数据池都支持把数据存储于HDFS, HBase。

元数据:两者使用相同的元数据。

SQL解释处理:比较相似都是通过词法分析生成执行计划。

不同点

执行计划:

Hive: 依赖于MapReduce执行框架,执行计划分成 map->shuffle->reduce->map->shuffle->reduce的模型。

(如果一个Query会 被编译成多轮MapReduce,则会有更多的写中间结果。由于MapReduce执行框架本身的特点,过多的中间过程会增加整个Query的执行时间。)

Impala: 把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询

数据流:

Hive: 采用推的方式,每一个计算节点计算完成后将数据主动推给后续节点。

Impala: 采用拉的方式,后续节点通过getNext主动向前面节点要数据,数据可以流式的返回给客户端

容错:

Hive:依赖Hadoop的容错能力,时间长

Impala:在查询过程中,没有容错逻辑,如果在执行过程中发生故障,则直接返回错误(这与Impala的设计有关,因为Impala定位于实时查询,一次查询失败, 再查一次就好了,再查一次的成本很低)。

适用面:

Hive:复杂的批处理查询任务,数据转换任务

Impala:实时数据分析

函数用法:

Hive:全面,符合SQL标准

Impala:Hive中某些函数不支持,比如count(distinct)不能超过一个

排序:

特别注意排序在Hive 和 Impala中的差别,null在Hive里是最大,在Impala是最小,故进行排序前,最好对空值进行预先处理


本文转载自: https://blog.csdn.net/qq_45008212/article/details/141272009
版权归原作者 一个叫卡卡的球员 所有, 如有侵权,请联系我们删除。

“Impala 与 Hive 的比较”的评论:

还没有评论