content
- Hive简介
- Hive工作原理
- Hive系统架构
- Hive HA
- Hive编程
Hive简介
▍初见
- Hive是一个构建于Hadoop顶层的数据仓库工具
- 某种程度上的用户编程接口——因为Hive本身不存储和处理数据
- Hive依赖分布式文件系统HDFS存储数据
- Hive依赖分布式并行计算模型MapReduce处理数据
- 定义了简单的类似SQL的查询语言——HiveSQL
- 需要把HiveQL语句转换成MapReduce任务运行
- Hive的特点非常适用于数据仓库
▍特点
- 采用批处理方式处理海量数据:仓库存储的多是静态数据(不会频繁变化+不需要快速响应),对静态数据的分析非常适合采用批处理方式
- 提供适合数据仓库操作的工具:Hive本身提供了一系列对数据进行ETL(提取+转换+加载)的工具,能够简单易用的操作、分析Hadoop中的大规模数据
▍补充
- Hive提供非实时的分析 + Hbase提供实时的访问
- 某些场景下Pig可作为Hive的替代工具
▍部署
Hive工作原理
▍SQL语句转化为MapReduce作业的基本原理
❶ 以join为例
❷ 以group by为例
▍SQL语句转化为MapReduce作业的基本过程
- Hive驱动中的编译器(compiler)将SQL抽象为语法树
- 语法树 → 查询块
- 查询块 → 逻辑查询计划
- 重写逻辑查询计划
- 逻辑查询计划 → 物理查询计划(真正的MapReduce任务生成!)
- 优化物理查询计划
- Hive驱动中的执行器(executer)对MapReduce任务进行执行和输出
Hive系统架构
▍图解
▍组成(结合图解)
- 用户接口模块(UI)——包括CLI、HWI、JDBC、ODBC、Thrift Server
- 驱动模块(Driver)——编译器+优化器+执行器,负责把HiveSQL语句转换成一系列MapReuce
- 元数据存储模块(MetaStore)——是一个独立的关系型数据库(比如MySQL)
▍说明(结合图解)
- 当启动MapReduce,Hive本身不会生成MapReduce算法程序
- 当启动MapReduce,Hive通过和JobTracker通信来初始化MapReduce任务
- 分布式就是
NameNode(1)+DataNode(n)
或JobTracker(1)+TaskTracker(n)
,JobTracker和NameNode是在一起的 - 数据文件存储在HDFS
Hive HA
▍引入
在实际应用中,Hive暴露出了不稳定的问题。我们解决的思路就是Hive HA(High Availability,高可用性)
▍思路
多个Hive实例被纳入到一个资源池中,由HAProxy提供一个统一的对外接口
在外部看来(程序开发人员的视角),可以认为它是一台「超强Hive」
▍图解
Hive编程
▶ 基本操作
创建 | create |
查看 | show |
装载 | load |
查看 | insert |
… | … |
▶ 编程优势
- 较少的代码量。比如经典的WordCount,原生Java需要63行,Hive仅仅使用了7行!
- 无需编程为jar包。MapReduce需要编译为jar包,Hive不需要
- 透明。HiveSQL语句最终是要转换为MapReduce任务的,但这一切都由Hive框架自动完成