Hive最终被编译成MapReduce,通过SQL执行MapReduce
1.产生原因Why
- MapReduce写起来复杂,Hive简单
- Hive学习成本低,方便非Java编程者对hdfs的数据做MapReduce操作。便于推广,
Hive是什么What(分析HDFS上的结构化数据)
- 是数据仓库(不是交互式的,一般存储历史数据,反范式,面向分析) 范式数据库?解决数据冗余
- 解释器、编译器、优化器等
- Hive运行时,元数据(表、数据库、分区、字段的定义和属性等)存储在关系型数据库(Mysql等,默认DB)里面(考虑到性能问题,访问读取多)
Hive架构
- 用户接口主要有三个:CLI、Client、WUI。最常用CLI。
- CLI启动时,会同时生成一个Hive副本。
- Client是Hive的客户端,用户连接至Hive Server。在启动Client时,需要指出Hive Server的所在节点,并且在该节点上启动Hive Server。
- WUI是通过浏览器访问Hive - Hive将元数据存储在关系数据库中:MataStore。如Mysql、derby。
Hive元数据包括:表的名字、列和分区及其属性。表的属性(是否外部表),表的数据所在目录。 - 解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用。
- Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成。(包含* 等的直接查询,不会生成MapReduce任务)
注:在hadoop2.x之后,Job Tracker 由YARN的Source Manager实现。
Hive编译解析结果:执行计划Operator
- 编译器将一个HQL转为操作符(最小的执行单元:Operator:树状结构)
- 操作符是Hive最小的处理单元
- 每个操作符代表HDFS的一个操作或者一道MapReduce作业
antlr词法语法分析工具解析HQL
Hive三种模式
- local模式(本地derby):数据库用内置的Derby,即客户端和数据库在同一个服务器上。一般用于单元测试
- 单用户模式:客户端单独一台服务器,数据库单独一台服务器,Mysql Hive CLI-> Mysql
限制:多台Hive服务器不能同时对同一元数据(Mysql)进行访问。
- 多用户模式(远程服务器模式:项目上线用这种模式): Hive CLI->MataStore Server->Mysql
用于非Java客户端访问元数据,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库
Remote一体:MataStore Client和MataStore Server放在一起,类似于单用户模式
Remote分开
可以看出划分方式:划分方式:元数据存储位置和管理
下一节:Hive搭建
http://blog.csdn.net/qq_36743482/article/details/78380141