hive 的架构

在这里插入图片描述
从上图中可以看到hive的架构组成,一般的DBMS主要分为存储和查询,而hive是做了查询,存储依赖于hdfs,hive的存储可以细分为meta data和real data,meta data存储表结构信息,存放在mysql中,real data表示真实的数据,存放在hdfs中,可以在hive的warehouse目录看到具体的数据库和表名。hive有自己查询语言hive QL,它是一种sql-like语言,hive自己会将hive查询解析成任务给执行引擎去做计算,具体支持的执行引擎包含mapReduce、tez、spark。对于这三种引擎来说,mapreduce是hadoop的核心组件,它是默认的执行引擎,虽然没有后面两种内存计算引擎快,主要在于稳定,它会将任务分为多个map reduce任务,每组map reduce任务的中间存储都会写入hdfs,所以会有频繁的IO读写,tez和spark都会生成一个DAG,在内存执行任务,会有因为内存不够导致任务失败的风险。
对比mapreduce和tez的任务,首先是一句hive QL语句fig.9,然后是一个对查询进行任务解析成计算引擎mapreduce执行任务的图fig.10,和解析成计算引擎tez执行任务的图fig.11:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到两个引擎主要的区别,在于中间结果是否写入hdfs。
对于hive的性能调优还存在于hive存储格式的选择,有四种格式TEXTFILE, SEQUENCEFILE, ORC and RCFILE,ORC格式性能最好,还有调优在于数据是否在建表的时候选择了分区字段,因为分区字段的选择决定了存储,假如我们按照某个字段propertytype分区,存储将变为如下格式
在这里插入图片描述
这样在查询时就不用对全量的数据进行查询,只用取需要的文件。

题外话

对于spark 和 tez的对比,暂时没有调研。

spark on hive 和 hive on spark是两个概念,前者是以hive作为存储,spark sql自己解析QL,然后使用自己的执行引擎,而后者是使用hive自己QL解析引擎,执行引擎切换为spark,对比开发而言前者需要自己写spark sql应用,后者则需要自己编译跟安装的hive匹配的spark源码,生成jar包给hive使用,再将hive.execution.engine修改就可以直接写hive QL就可以。

参考文献
Large-scale data modeling in Hive and distributed query processing using Mapreduce and Tez.pdf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值