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是最小,故进行排序前,最好对空值进行预先处理