Blog
hive-01 基本概念
什么是hive
hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表并提供类SQL查询功能。
本质:将HQL转化成MapReduce程序
- Hive处理的数据存储在HDFS上
- Hive分析数据底层的实现是MapReduce
- 执行程序运行在Yarn上
inputformat -> map -> reduce -> outformat
元数据 记录hive表和hdfs的对应关系
- hive封装MapReduce模板
- 客户端sql语句转化相应的模板
- 运行mapreduce计算结果 返回给客户端
优点:
- 操作接口采用类sql语法,提供快速开发的能力,简单容易上手
- 避免写mapreduce减少开发人员的学习成本
- hive延迟比较高,常用于对实时性不高的数据分析
- 优势在于处理大数据
- 支持用户自定义函数
缺点
- hive的hql表达能力有限
- 迭代式算法无法表达
- 数据挖掘方面不擅长
- hive的效率比较低
- 自定生成mapreduce作业,通常不够智能化
- hive调优比较困难,粒度比较粗
hive架构
用户接口:client
- CLI访问hive、JDBC访问hive、webui访问hive
元数据:metastore
- 元数据包括:表名,表属性的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等
- 默认存储在自带的derby数据库中,推荐使用mysql存储metastore
hadoop
- 使用hdfs进行存储,使用mapreduce进行计算
驱动器:Driver
- 解析器SQL Parser:将sql字符串转换成抽象语法树AST,这一步一般用第三方工具完成,比如antlr。对AST进行语法分析,比如表是否存在,字段是否存在,SQL语义是否有误
- 编译器 Physical Plan:将AST编译生成逻辑执行计划
- 优化器 Query Optimizer:对逻辑执行计划进行优化
- 执行器 Excution:把逻辑执行计划转换成可以运行的物理计划转换成可以运行的物理计划,对于hive来说就是mr/spark
可以理解为:
- sql解析器 from找到表与hdfs对应关系等准备工作
- 编译器将sql转换成mr任务
- 优化器
- 执行器触发mr任务执行
hive和数据库比较
- 查询语言
- HQL VS SQL
- 数据更新
- Hive读多写少 覆盖全表更新
- 执行延迟
- Hive延迟高
- 数据规模
- Hive 海量数据