Hive——简介
Hive 是基于 Hadoop 构建的一套数据仓库分析系统,它提供了丰富的 SQL 查询方式来分析存储在 Hadoop 分布式文件系统中的数据, 可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能.可以将 SQL 语句转换为 MapReduce 任务进行运行,通过自己的 SQL 去 查询分析需要的内容,这套 SQL 简称 Hive SQL。
Hive的产生背景及介绍
产生背景
1)MapReduce编程的不便性(MapReduce编程十分繁琐,而且不方便修改)
2)HDFS上缺少Schema
Hive是什么
1)由FaceBook开源,最初用于解决海量结构化的日志数据统计问题
2)构建在hadoop上的数据仓库
3)Hive定义了一种类SQL查询语言:HQL(类似sql但不完全相同)
4)通常用于进行离线数据处理(早期底层采用mapreduce)
5)底层支持多种不同执行引擎
6)支持多种不同的压缩格式、存储格式以及自定义函数
(Hive现在的底层执行引擎支持很多包括spark(Hive on spark),mapreduce(Hive on mapreduce)、Tez(Hive on Tez))
为什么要用Hive(Hive的优势)
1)简单、容易上手(提供了类似sql查询语言hql)
2)为超大数据集设计的计算/存储扩展能力(MR计算,HDFS存储)
3)统一的元数据管理(可于Presto/Impala/SparkSQL等共享数据)
Hive的发展历程
在Hive的发展历程中,不得不提的就是Stinger
Stinger分了几个阶段来做:Phase 1、2、3 ,Stringer.next;这几个阶段对Hive性能的提升是非常至关重要的
07/08 facebook
13/05 hive-0.11 Stinger Phase 1 加入了ORC/HiveServer2
13/10 hive-0.12 Stinger Phase 2 ORC improvement(对ORC做了些改善)
14/04 hive-0.13 Stinger Phase 3 Tez/Vectorized query engine(加入了Tez和支持向量化的查询)
14/11 hive-0.14 Stinger.next Phase 1 Cost-based optimizer(Cost-based简称CBO)
(The Stinger Initiative making Apache Hive 100 times faster)
Hive系统架构
Command-line shell:shell操作客户端
Trift/JDBC:Thrift代表一种协议/服务端启起来,客户端可以通过JDBC的方式去访问
Driver:接收sql做相应的分析处理:
1)首先将SQL语句转换成抽象语法树(抽象语法树拿到是不能执行的)
2)将抽象语法树转换成逻辑执行计划
3)对逻辑执行计划进行优化,形成物理执行计划,优化之后才能够变成作业去运行
MapReduce:底层执行引擎
HadoopStorage:计算结果输出存储
Metastore:元数据存储
1)metastore默认是存放在derby库中,通常现实中部署都是存放在mysql库中。其中生产上存储metastore的mysql要做HA.
2)metastore包括的内容:
1>:database: name,location,owner,name
2>:table: name,owner,location,column name/type/index,createtime
3)hive的metastore是和Spark/impala通用的,例如在hive中创建一张表,在Spark/impala中也能使用,反之Spark/impala创建的表在hive中也能使用。
Hive部署架构
注意点:1)生产上部署时Hive的元数据存储的数据库要做主备。
2)Hive不需要部署在每台机器上,一台就行,他就是一个客户端,解析你的sql生成mr交给yarn运行