目标
Apache Hive和Impala都可以在HDFS上执行查询,但是他们之间存在一些不同,在这片文章中,将会做一下对比。
介绍
Hive
一般使用Hive做数据密集型任务,例如查询,分析,处理,可视化。刚开始是由Facebook开发。Hive是基于Hadoop平台构建的数据仓库,当然也兼容其他的文件系统,例如S3。Hive提供HQL语言来读取数据并转换查询到MapReduce,Tez,Spark jobs,Hive有以下特性
- 提供索引加速处理
- Hive支持各种类型的存储,例如文本,RCFile,HBase,ORC
- 支持元数据存储
- 支持SQL查询,尽管底层会把SQL转换为MapReduce,Tez,Spark
- 处理字符串,日期数据时,可以使用内建方法,也可以自建方法
Impala
Impala是一个开源的MPP SQL引擎。可以在HDFS,Hbase上运行查询。在数据处理时,impala并不会优先在节点之间移动数据,可以与Hadoop生态系统很好集成。作为一个开源的交互式BI任务,Impala的统一资源管理是它成为一个标准。
- Impala支持HDFS,Hbase
- Impala支持Hadoop文件格式,例如文本,LZO,Avro,RCFile,Parquet
- 支持Kerberos验证
- 集成Sentry,也支持基于角色的授权
Hive vs Impala
Hive | Impala | |
---|---|---|
查询处理 | 普遍存在冷启动的问题 | 避免可能的启动压力,Impala后端进程总是处在启动状态,随时处理查询 |
中间结果 | Hive会物质化中间结果,这样增加可伸缩性,容错能力,但是会减慢数据处理速度 | 在executors之间进行流式传输中间结果,但是会带来伸缩性问题 |
运行期间 | 在编译时间,Hive形成查询表达式 | 在运行期间,Impala形成代码 |
交互式计算 | 对于交互式查询,Hive并不是理想 | 对于交互式查询,Impala是可选的 |
类型 | 是基于批量的Hadoop MapReduce | 更像MPP数据库 |
复杂类型 | 支持复杂类型 | 不支持复杂类型 |
查询执行 | Hive查询的结果具有容错能力,尽管有节点宕机 | 在查询执行中,如果节点宕机,那么Impala重新执行 |
性能 | Hive适合运行中等或者高级复杂查询,低端查询使用Hive LLAP | 尽管Impala一直在优化复杂查询,但是更适合低端查询 |
查询SQL | Hive LLAP允许进行亚秒级的交互式查询,不需要额外的分析工具 | 提供快速的,交互式的SQL查询 |
时间消耗 | Hive LLAP的动态运行特性减少工作压力,使用LLAP可以减少时间消耗 | 对于简单的查询,消耗更少的时间,但是对于复杂的查询,比LLAP消耗更多的时间 |
直接交互 | LLAP是一个长运行的进程,可以代替与HDFS直连,紧密集成基于DAG框架 | Impala需要在HDFS,hbase上有文件 |
ETL jobs | 对于长运行的jobs,Hive是理想的选择 | NA |
速度 | NA | Impala比Hive块6-69倍 |