现在在互联网行业,稍微和大数据研发或者数据分析工作沾边的,都会有听到Hive这个工具。那么Hive是什么呢,是什么情况出现了Hive这个工具,它用来处理什么样的问题,哪些是它不能处理的,本文打算从以上角度来简单介绍一下Hive。
Hive是什么
企业中,一般的大数据仓库都是基于关系型数据库来存储数据的。比如我们的日志数据,一般会通过消息队列导入给数据仓库同学,由其加工解析,建表,存储关键字段的信息。Hive就是提供用来利用SQL语句来查询存储在Hadoop分布式文件系统(HDFS)中的数据库中的大数据组件。
为什么会出现Hive
因为是大数据,由于数据量庞大,数据仓库的数据会存储在分布式文件系统HDFS中,这样,针对于HDFS中的数据,需要分布式的计算,这里主要指的是Hadoop的MapReduce计算模型,如果没有HIve,针对于数据的分析计算就得去编写一些MapReduce代码或者去调用Hadoop提供的MapReduce的API去完成。很显然,习惯于用SQL来分析数据的一些数据分析人员就一时无从下手。那么,如果能够将一些主要的查询分析的API抽象出来,上层通过SQL进行交互,那么是不是就可以方便一些习惯于SQL的数据分析人员能够快速的进行分析查询呢,由此,HIve应运而生。
Hive的特点
- 类似于SQL的语法,很接近MySQL。
- 面向数据仓库对数据进行查询分析,不支持行级别的增删改查,一般都是批量写入。
- 底层依赖于Hadoop批处理,主要是MapReduce的计算模型,不能实时响应查询结果,会有延迟。
- 不支持事务
Hive和Hadoop的关系
首先,简要说明一下Hadoop,这个是一个基于大数据海量存储与计算的模型,核心模块包括分布式计算模型MapReduce和分布式文件系统HDFS。主要思想是将大数据量的计算分割成一个个的计算单元,然后在各个低廉成本的计算机节点上执行,最后将结算结果输出。那么Hive是面向大数据的查询分析工具,其底层的计算实现也是依赖于MapReduce的API的,数据也都是存储在HDFS上面的。如果没有Hive,那么对于数据的分析计算,就得需要自己来调用MapReduce的API来完成,这样,原来基于SQL的数据分析师就需要有更多的学习成本,或者说依赖于一些专业的Java开发人员来实现这些查询分析工作。Hive通过将一些常用的MapReduce的API进行封装,向上提供一个可以基于SQL进行分析的工具,这样,数据分析人员还可以用原有的SQL知识进行操作,这也是Hive出现的原因。