概述
Hive是一个构建在Hadoop之上的数据仓库,和传统的数据仓库一样主要用来访问和管理数据,提供了类SQL查询语言;和传统数据仓库不一样的是可以处理超大规模的数据,可扩展性和容错性非常强。
Hive是由FaceBook开源的分布式数据分析引擎,它把SQL语句转化成MapReduce作业提交到Hadoop上运行并返回结果。
Hive可以做日志分析(包括统计网站一个时间段内的pv、uv),海量结构化数据离线分析,支持多维度、低成本数据分析,不必编写MapReduce程序。
Hive不是一个OLTP系统,响应时间慢,无法实时更新数据;另外,Hive的表达能力有限,不支持机器学习的迭代式计算,有些复杂运算用SQL不易表达。
Hive架构
Hive 和HBase一样,只是管理数据,数据存储在HDFS上,Yarn管理计算。Hive的内核有MapReduce、Spark,也有其他的计算引擎,不过大多数还是使用MapReduce。
1)用户接口,包括 CLI,JDBC/ODBC,WebUI
2)元数据存储(Metastore),默认存储在自带的数据库derby中,线上使用时一般换为MySQL。Metastore存储数据库的Schema,包括字段名称、类型等,以及数据映射关系(数据库Table和HDFS文件夹的对应关系)。Metastore检查SQL的正确性。
3)驱动器(Driver)是一个解释器、编译器、优化器、执行器,使SQL转化为MapReduce,并将MapReduce作业提交到Yarn上运行。
4)Hadoop使用MapReduce进行计算,使用HDFS 进行存储。
Hive访问方式
- 重客户端:
所有的SQL翻译都在客户端进行,最后将MapReduce作业提交到HDFS上执行。客户端比较耗费资源,每个客户端都可以看做是一个Hive Server。
使用Hive CLI,在本地客户端输入“Hive”运行Hive,通过本地配置获取Metastore(借助第三方数据库存储)的位置,本地客户端使用Metastore来运行SQL,在本地翻译SQL为MapReduce作业,并提交到Hadoop上运行。系统可以启动多个Metastore,映射到MySQL,所以它是HA高可靠。
hive
hive -h <host> -p <port>
- 轻客户端:
类似于JDBC,Beeline,将请求提交到Hive Server上,由Hive Server将SQL翻译成MapReduce后提交到HDFS上运行。一般只需要一个Hiv