hive产生
1、如果用mapreducer处理格式化数据是比较麻烦的开发周期比较长,成本比较高,而对于格式化数据来说还是sql跟擅长,而且成本比较低,于是方言版sql ,hql出来了
2、hive是基于hadoop的 数据存储在hdfs 的 并且对客户端提供hql支持 将hql语句转换为mapreduce任务的
hive 依赖于hadoop的分布式数据仓库
hive特点
-
hive是由facebook实现并开源的
-
hive是基于hadoop的一个数据仓库工具
基于hadoop:
hive中的表中的数据 存储在hdfs上的 存储完全依赖于hdfs
hive最终计算使用的默认mapreduce
资源调度 yarn
数据仓库工具:data warehouse dw
存储数据的 更加像一个数据的管理工具
用户存储各种用于分析的数据 存储的数据量比较庞大的
结构复杂的
大数据集的管理工具
数据库 和数据仓库的区别:
数据库中一般存储某一个分析结果 结果
数据仓库: 面向主题的 过程
数据分析过程 各个层级的数据
原始 日志
flow.log
抽层 :
etl
原始数据加工
细化 将需要分析的字段 抽出来 存储在一个个表中
分析基于仓库中的数据
使用场景上:
OLTP On line Transaction Processing 联机事务处理
增 删 改
OLAP On line analysis Processing 联机分析处理
查询
数据库 更加倾向于 OLTP
数据仓库:
更加倾向于 olap 查询
hive 不支持 数据delete update 支持insert 但是insert的效率极低
模式上:
数据库 mysql --写模式
数据写入的时候 校验
hbase nosql 无严格模式
数据仓库 hive—读模式
数据读取的时候 校验的
事务支持:
数据仓库 不擅长事务的 hive不支持事务
数据库 mysql 支持事务的 -
可以将结构化数据映射为一张数据库表
结果化的一条数据---------》表中的一行数据
结果化的一个字段----------》表中的一个列 -
提供hql(hiven sql)查询功能
对客户端提供hql查询功能 -
地层数据存储在HDFS上
-
hive本质是将sql语句转换为MapReducer任务运行
hql--------------》mapreducer -
使不熟悉Mapreducer的用户很方便的利用hql处理和计算hdfs上的结构话数据节省开发成本
-
适用于离线的批量数据计算
hive架构
1、用户接口层,客户端使用
CLI命令行
hive>hive的命令操作以界面
jdbc/odbc
java程序操作hive jdbc
web ui一般不用界面太丑,操作繁琐
2、thrift server 跨语言服务层
hive hql
java |c| python
进其他语言转化为hive能识别的语言
3、元数据存储层 meta store
元数据:描述数据(hive表数据)的数据 描述hive真实存储数据的数据
hive中表的相关信息(除了表数据以外的信息)
表和hdfs数据的路径对应关系
表中的字段类型
表中字段的顺序
表的创建时间。。。
这些信息就叫做hive的元数据信息
hive的元数据信息 存储的时候 采用格式化存储
存储在关系型数据库
默认的元数据存储数据库 derby
derby存储的时候有缺陷的 一般生产上换成mysql
hive表数据存储在hdfs上
hive 表数据存储hdfs 元数据 存储关系型数据库的
4、核心驱动层Driver
将hql转换成mapreducer执行的
1、解释器 解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)
解释hql语句中的核心的关键词
select group by order by limit
2、编译器:编译器将语法树编译为逻辑执行计划 一个hql语句会转化为多个mapreducer任务多个job
3、 优化器:优化器是对逻辑执行计划进行优化
4、执行器:执行器是调用底层的运行框架执行 优化器优化完成的结果