大数据组件--Hive与Impala的异同

九月10个月前技术文章224

一、同

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

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

    • SQL语法:基本类似。

二、异

1)、底层运行使用的技术

hive底层默认使用mapreduce引擎进行执行计算,impala底层执行语言分为两种,前端使用的是Java,执行具体查询功能的后端使用的是C++编写的,针对特定查询生成特定代码,执行效率更高。

最大使用内存,中间结果不写磁盘,及时的通过网络以流式的方式进行传递

2)、执行计划

hive依赖于mapreduce执行框架,底层会分成map操作-shuffle-reduce操作-map操作-shuffle-reduce操作..的执行过程去执行,如果一个查询被编译成多个map、reduce操作,说明中间出现多次写磁盘的操作,增加执行时间。

impala是将执行计划表现为一个完整的执行计划树,可以将执行计划分发到每个impalad中执行查询,从而保证impala有更好的并发性,并且避免中间的排序和shuffle。


impala执行计划如图:

图1.png

3)、数据流

hive采用的是推的方式,它是在数据节点上的数据都进行计算完毕后,将数据推给后面的节点。

impala采用的是拉的方式,后续节点通过getNext主动向前面节点要数据,一天处理完就可以立即展示,不用等所有的数据都完成才进行展示。

4)、内存使用

hive执行是内存不够会使用磁盘进行计算

impala只基于内存计算,内存放不下数据时,低版本的impala会报错误,可以调整参数来避免报错。impala在多个阶段之间利用网络传输数据,在执行过程不会有写磁盘的操作(insert除外)。



5)、调度

Hive: 任务调度依赖于Hadoop的yarn调度策略。

Impala: 调度由自己完成,目前只有一种调度器simple-schedule,它会尽量满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的物理机器,尽量能不用网络io的就不用。

6)、容错

Hive: 依赖于Hadoop的容错能力。

Impala: 在查询过程中,没有容错逻辑,如果在执行过程中发生故障,则直接返回错误(这与Impala的设计有关,因为Impala定位于实时查询,一次查询失败, 再查一次执行时间很短,成本低)。但从整体来看,Impala是能很好的容错,所有的Impalad是对等的结构,用户可以向任何一个 Impalad提交查询,如果一个Impalad失效,其上正在运行的所有Query都将失败,但用户可以重新提交查询由其它Impalad代替执行,不 会影响服务。对于State Store目前只有一个,但当State Store失效,也不会影响服务,每个Impalad都缓存了State Store的信息,只是不能再更新集群状态,有可能会把执行任务分配给已经失效的Impalad执行,导致本次Query失败。

   7)、适用面

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

Impala:实时数据分析,因为不支持UDF,能处理的问题域有一定的限制,与Hive配合使用,对Hive的结果数据集进行实时分析。


标签: kudu

相关文章

大数据高可用系列--kudu高可用应急方案

大数据高可用系列--kudu高可用应急方案

1 设置机架感知1.1 前置说明    1.9版本后的kudu已经支持机架感知(cdh6之后的版本中的kudu已支持),由于kudu的每个Tablet一般是三副...

CDH实操--kudumaster迁移

CDH实操--kudumaster迁移

1 概述本次kudumaster迁移,中间不需要停kudu集群(会涉及滚动重启kudu角色); 注:若因为任务持续运行导致kudu停止超时可手动一台台停止-启动2 master迁移将cdh2中的ma...

使用impala操作kudu

使用impala操作kudu

登录impala-shell,创建impala_kudu数据库。1、创建表CREATE TABLE student ( id int not null, name STRING null ,...

大数据组件--Impala概述

Apache Impala是一个适用于实时交互的sql软件,是基于hive的大数据分析查询引擎,hive和impala有不同的侧重面,通常是两个互相配合工作,可以先用hive进行一个数据的预处理清洗转...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。