1.hive是什么
也许在你学习hive时,你已经学习过mapreduce,学习过mapreduce的应该知道,
mapreduce是一个分布式的计算框架,当数据量小的时候,很难看出来mapreduce的优势,就好比说你用winrar将1kb的文件压缩后反而变大到十几kb的样子,使用mapreduce来计算小数据量时的性能还不如简单几行java代码的性能。
当数据量达到TB级的时候甚至是PB级的时候,使用mapreduce就能看到mapreduce是很快的,
为什么快呢,mapreduce在计算大数据量的时候是使用多个节点(计算机)
同时计算比一个单机计算大数据量的速度快的多,将原本串行化的计算转化为分布式的计算(有时候也叫并行计算,
一个作业拆分成多个不可拆分的小任务分发到个个节点的机器上去运行,最后将个个机器上运行的结果汇总得到一次作业的结果),自然就快一些。
一般呢,我们在处理大数据的时候经常会想到使用分布式的计算框架 ,如果使用mapreduce的话需要有java开发经验,
对于一个没有java开发经验只会sql的人来说真是一种痛苦,于是乎hive诞生了,废话了这么多就是想引出hive。
进入正题吧,hive是什么呢,hive是一个将sql转化为mapreduce任务工具,这样可以让一个不懂java的人通过使用sql来进行分布式的数据计算和统计汇总的作业。
hive是一个数据仓库:在百度百科中这样定义的是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持的目的而创建的。
在大数据量的基础上通过使用hive对数据的一些指标(有时候也加kpi)进行统计和分析,从而为企业提供指导性的业务流程的改进,成本控制和质量控制。
简单的理解数据仓库大部分情况是用来做查询和分析使用的。
hive是一个解释器,编译器,优化器:hive解析sql,将解析的结果编译成mapreduce任务,同时会对编译的mapreduce任务进行优化处理,改善任务的执行性能。hive的优化做的非常好,据说曾经进行过悬赏,如果你写的mapreduce任务的性能超过hive优化后的mapreduce任务的性能他们将会给你100万美金,由此看来hive还是非常的强大。
2.hive架构
hive架构图如下:
上图中,可以通过CLI(命令行接口),JDBC/ODBC,Web GUI 访问hive。于此同时hive的元数据(hive中表结构的定义如表有多少个字段,每个字段的类型是什么)都存储在关系型数据库中。三种链接hive的方式最后统一通多一个Diveer 的程序将sql 转化成mapreduce的job任务去执行。