hive概念
hive的产生背景:
mapreduce----统计分析 用于这个统计分析的数据 都是结构化的数据
以后生产中 接触的数据大部分都是结构化数据
如果数据量比较小的时候:
最好的解决方案 mysql
math,wangbaoqiang,85
java程序 mysql数据库相比 mysql更方便--使用
成本:
开发:java 20行代码 mysql--1行
人工:
java工程师
java c c++ python
sql语句:
数据量大了:
统计分析
mapreduce做分布式计算
针对这个结构化的数据的统计分析 sql
mapreduce的统计分析针对结构化数据的 绝大部分的都可以使用sql语句做
为什么使用hive?
1)使用 sql使用上更方便
2)成本
1)开发
统计平均成绩
MR:40行
sql:select course,avg(score) from stu group by course;
2)用人:
MR工程师:
java
hadoop MR编程
sql工程师:
出现了一个基于MR编程的 实现sql实现的工具 hive
hive是什么?
1.Hive 由 Facebook 实现并开源
贡献Apache
http://hive.apache.org/
2.是基于 Hadoop 的一个数据仓库工具
hive产生就是为了解决MR的结构数据分析问题
数据仓库:海量的数据的存储
数据仓库和数据库(关系型数据库)区别:
1.概念:
数据库:数量小结构化数据存储 更倾向于精细化的数据管理 数据存储的时候分库分表存储
有事务的概念
数据仓库:数据量大的结构数据存储 倾向于数据的管理
没有事务的概念
2.使用:
数据库:mysql/oracle/sql server 标准sql
数据仓库:hive中-----hql 方言sql
3.应用场景:
数据库:OLTP On-Line Transaction Processing联机事务处理
insert delete update
数据仓库:OLAP:On-Line Analysis Processing 联机分析事物处理
select
在hive中不支持update delete 但是支持insert
4.数据量
数据库:集中式 数据量比较小
数据仓库:分布式 数据量大
5.延时性
数据库:实时
数据仓库:离线的
3.可以将结构化的数据映射为一张数据库表
math,zs,67
一行数据---数据库的一条记录
一列数据----数据库中的一个字段
4.并提供 HQL(Hive SQL)查询功能
方言sql
5.底层数据是存储在 HDFS 上
hive的最终的原始数据存储在hdfs
6.Hive的本质是将 SQL 语句转换为 MapReduce 任务运行
hive的底层会存储很多的map reduce的模板
执行hql语句 底层将hql和模板进行匹配
hive相当于一个hadoop的客户端
hive的本质上就是一个hadoop的客户端工具
7.使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据
8.适用于离线的批量数据计算
底层hadoop
hive的架构:
1.用户接口层
CLI:shell 命令行
jdbc/odbc:java操作hive
web UI:可视化界面的操作 不用 丑 比较麻烦
2.thrift server层:跨语言服务
java c ruby
对外提供hive支持跨语言连接的服务
3.元数据层:
hive的数据存储两大部分:
1)原始数据 真实数据 存储在hdfs上的
2)元数据 描述原始数据的数据
描述的是原始数据的存储规则的数据
hive中有一个表:
stu:course,name,score---student.txt
元数据:
1)表的描述信息
包括表和hdfs的数据对应关系,表的属性
2)表的字段信息
字段类型
字段顺序
3)数据库的描述信息
hive的元数据存储在关系型数据库中的
可以存储mysql中
4)核心驱动层:
hive本质将hql语句---MR程序
驱动器Driver:
驱动hql--MR---提交 的整个过程执行
编译器:最初的实现
内部存储了很多map reduce的模板
将hql语句编译为map reduce任务
优化器
将编译器的编译结果做一个优化,最终出来就是最完美的执行方案
执行器:
将优化器的优化结果 进行提交给集群进行执行
hive的特点:
缺点:
1)不支持update delete操作 支持insert操作 效率很低
2)hive的延时性高
3)hive不支持事务