Hive简介
Hive简介
第一节:hive的产生背景
mapreduce处理的绝大多数的数据,都是格式化的数据。格式化的数据的处理sql最擅长。mapjoin reducejoin的开发代码要写40行,而sql就一个sql语句就可以了,例如:select * from a join b on a.id=b.id;。
mapreduce:开发周期比较长,人员成本高。
Sql:成本低(时间,金钱)
而hive是faceback开发的一个工具,实现用户写sql语句进行代码开发,最终执行转换mapreduce | tez (分布式计算),是基于hadoop的想让hadoop的开发更加轻便。
第二节:hive的介绍
一、概念
基于hadoop,数据存储在hdfs,并且对客户端提供hql支持,将hql语句转换为mapreduce任务,hql方言版的sql。
二、特点
1、Hive 由 Facebook 实现并开源
2、是基于 Hadoop 的一个数据仓库工具
3、可以将结构化的数据映射为一张数据库表
结构化的一条数据 --- 表中一行数据
结构化每一个字段 --- 表中的一个列
4、并提供 HQL(Hive SQL)查询功能
对客户端提供hql查询
5、底层数据是存储在 HDFS 上
6、Hive的本质是将 SQL 语句转换为 MapReduce 任务运行
hql----mapreduce
7、使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据
8、适用于离线的批量数据计算。
三、基于hadoop
hive的表中的数据是存储在hdfs上的,存储完全依赖于hdfs;hive最终计算使用的默认mapreduce,资源调度用yarn。
四、数据仓库
1、数据仓库工具
用于存储数据的,更加像一个数据的管理工具。用户存储各种用于分析的数据,存储的数据量比较庞大、结构复杂。大数据集的管理工具。
2、数据库和数据仓库的区别
(1)数据类型
数据库: 一般存储某一个分析结果(可以直接进行sql的查询出结果,不用再进行数据的清洗)
数据仓库: 面向主题,过程的 (存储原始数据,经过清洗的各个层次的数据,以及最后的结果数据,都可以进行存储)
数据分析过程,各个层级的数据
原始日志:flow.log
抽层:etl ,对原始数据进行加工,对数据进行细化将需要分析的字段抽出来存储在一个个表中。
分析是基于仓库中的数据。
(2)使用场景上
OLTP On line Transaction Processing 联机事务处理(增、删、改)
OLAP On line analysis Processing 联机分析处理(查询)
数据库:更加倾向于OLTP
数据仓库:更加倾向于OLAP
hive不支持数据的delete、update 支持insert,但是insert的效率极低
(3)模式上
数据库:mysql --- 写模式
数据写入的时候进行校验(例如数据库中5个字段都是int类型的,在写的时候插入String类型就插不进去,所以是写入的时候进行校验的)
hbase nosql 无严格模式
数据仓库:hive --- 读模式
数据读取的时候再校验的(表中只有3个字段,在写入要5个字段的时候是可以的,但最终在读取结果的还是只呈现3个,所以是在进行读的时候进行校验的)
(4)事务支持
数据仓库:不擅长事务的,hive不支持事务
数据库:擅长事务的,mysql支持事务的
第三节:hive的架构
一、用户接口层
1、概念
给客户端使用的
2、CLI(命令行)
hive>
hive的命令行操作界面
3、JDBC/ODBC
Java或其他语言操作hive需要进行jdbc/odbc的连接。一般是使用jdbc
4、web ui
一般不用,因为界面太丑、配置繁琐。
二、跨语言服务层(thrift server)
在用户接口层可以利用不同的语言,例如hql,java等语言来进行操作,但最终要经过thrift server进行语言的转换,使得hive可以对其进行识别。但其中CLI、web ui是可以直接去操作核心驱动的,不需要经过thrift server,而JDBC/ODBC是要经过转换的。
三、元数据存储层(meta store)
元数据:描述数据(hive表数据)的数据
描述hive真实存储数据的数据,hive的表数据存储在hdfs的。
hive中表的相关信息有:
表和hdfs数据的路径对应关系
表中的字段类型
表中字段的顺序
表的创建时间。。。
这些信息就叫做hive的元数据信息(除了hive表中的数据信息)
hive的元数据信息在存储的时候采用的是格式化存储。存储在关系型数据库,默认的元数据存储数据库derby,但derby存储的时候有缺陷的,一般生产上换成mysql。
hive 表数据存储hdfs,元数据存储在关系型数据库。
四、核心驱动层(Driver)
(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)。解释hql语句中的核心的关键词,如:select group by order by limit
(2) 编译器:编译器是将语法树编译为逻辑执行计划。一个hql语句会转换为多个mapreduce任务、多个job。
(3) 优化器:优化器是对逻辑执行计划进行优化。
(4) 执行器:执行器是调用底层的运行框架执行,同时优化器优化完成的结果。
第四节:hive的优缺点
一、缺点
(1)延时性高
基于hadoop
(2)hive对事务的支持很弱
不擅长。行级别一般很少使用
(3)hive不支持update、delete
表数据 hdfs上,hdfs不支持修改,支持insert将insert的数据写入一个新的文件效率低。
二、优点
延展性好,内部提供271个内置函数,支持自定义函数。