hive和impala的区别
关于hive和impala是否一样的问题:
1、执行计划不同
impala:就像一颗计划树一样,是发布计划到各个impalad执行查询,因此impala有更好的并发性;
hive:就像管道一样,将执行计划组装成map-reduce模型(map-shuffle-reduce-map-shuffle-reduce…),中间会产生不必要的sort和shuffle,根据MapReduce执行框架本身的特点,过多的中间过程会增加整个查询的执行时间。
2、数据流不同
impala:采用拉的形式,后面节点会通过getNext主动像前面节点获取数据,再通过流的方式返回给客户端,处理完一条就可以展示一条,不需要等到全部处理完成,更符合SQL交互式查询;
hive:采用推的方式,前面节点主动将计算好的数据推给后续节点。
3、使用内存不同
impala:内存不足时,会直接返回错误,不会利用外存,所以impala在做Query时会受到一些限制,最好还是和Hive配合使用;impala在多个阶段之间利用网络传输,在执行过程中不会存在写入磁盘的操作(insert除外)。
hive:在执行过程中内存不足的情况下,会使用外存,以保证Query会顺利执行完,每一轮MapReduce结束,中间结果也会写入HDFS,同样由于MapRecude执行架构的特性,shuffle也会有写入本地磁盘的操作。
4、调度不同
impala:由自己完成,目前只有一种调度器simple-schedule,它会尽量满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的物理机器。
hive:调度任务依赖于Hadoop的调度策略。
5、容错不同
impala:在查询过程中,没有容错逻辑,如果在执行过程中发生故障,直接返回错误,impala的特性是实时查询,一次查询失败,再查一次就好啦,再查一次的成本也很低。但整体的impala是能很好的容错,所有的impalad是对等的结构,用户可以向所有的impalad提交查询,如果一个impalad查询失效,其上运行的所有查询都将失败,但用户可以重新提交由其他impalad代替执行,不会影响服务。对于State Store目前只有一个,但当State Store失效,也不会影响服务,每个impalad都缓存了State Store的信息,只是不能再更新集群状态,有可能会把任务分配给已经失效的impalad,导致本次查询失败。
hive:依赖于Hadoop的容错能力。
6、适用面不同
impala:实时数据分析,不支持UDF,能处理的问题域有一定的限制,一般与hive配合使用,对hive的数据结果集进行实时分析。
hive:复杂的批处理查询任务,数据转换任务。
参考链接:https://www.idongde.com/c/0d7CbdF837ac8b93.shtml