Hive的概念

来源:互联网 发布:手机淘宝店铺店招白色 编辑:程序博客网 时间:2024/06/15 16:16

1.Hive的概念

       Hive Facebook实现并开源, 基于Hadoop 的一个数据仓库工具,可以将结构化的数据映射为一张数据库表,并提供HQL(Hive SQL)查询功能, 底层数据是存储在HDFS上。 Hive的本质是将 HQL语句转换为 MapReduce 任务运行,使不熟悉MapReduce 的用户很方便地利用HQL进行数据ETLExtraction-Transformation-Loading) 操作。

注:Hive 依赖于 HDFS存储数据,Hive HQL转换成MapReduce 执行 ,所以说Hive是基于 hadoop的一个数据仓库工具,实质就是一款基于HDFSMapReduce计算框架 。


2.使用Hive的原因

(1)直接使用 MapReduce 所面临的问题:
 学习成本太高
 项目周期要求太短
 MapReduce 实现复杂查询逻辑开发难度太大


(2)为什么要使用
Hive
 更友好的接口: 操作接口采用类
SQL 的语法,提供快速开发的能力
 更低的学习成本: 避免了写
MapReduce,减少开发人员的学习成本
 更好的扩展性: 可自由扩展集群规模而无需重启服务, 还支持用户自定义函数


3.Hive的特点

优点:
1、 可扩展性,横向扩展,Hive可以自由的扩展集群的规模, 一般情况下不需要重启服务:
横向扩展: 通过分担压力的方式扩展集群的规模
纵向扩展:一台服务器
cpu i7-6700k 4 核心8线程,8核心16 线程,内存64G => 128G;
2
、 延展性, Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数;
3、 良好的容错性,可以保障即使有节点出现问题,SQL语句仍可完成执行 (这里的容错性是基于hdfs的容错性:单点故障的解决和数据块的冗余存储)。

缺点:
1hive不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结果导入到文件中(当前选择的hive-1.2.1 的版本支持记录级别的插入操作);
2Hive的查询延时很严重,因为MapReduce Job的启动过程消耗很长时间,所以不能用在交互查询系统中;
3hive 对事务支持较弱(因为不没有增删改, 所以主要用来做OLAP(联机分析处理),而不是OLTP(联机事务处理),这就是数据处理的两大级别)。

4.Hive架构


CLI:command line interface

ODBC:开放数据库连接(Open Database Connectivity,ODBC)

JDBC:java数据库连接(Java DataBase Connectivity,JDBC)

JDBC/ODBC:将hive启动为后台服务,用客户端连接就能使用

hive的元数据库在刚开始创建的时候有29张表,但是随着操作的增多,表也会增多

hive的四大组件:
 驱动器 Thrift  Server
 编译器 Compiler
 优化器 Optimizer
 执行器 Executor

Hive架构的基本组成

用户接口:
CLIShell终端命令行,最常用(学习,调试,生产),JDBC/ODBCHive 的基于 JDBC操作提供的客户端, 用户(开发员,运维人员) 通过这连接至 Hive server Web UI,通过浏览器访问Hive;
元数据存储:元数据,通俗的讲, 就是存储在 Hive中的数据的描述信息,

                       Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和外部表),表的数据所在目录,hive的元数据库只会存表所对应的hdfs上的目                        录, 不会存该表当中存储了哪些文件。

                       Metastore 默认存在自带的Derby 数据库中。缺点就是不适合多用户操作,并且数据存储目录不固定。数据库跟着Hive 走,极度不方便管理,

                      例如:hive在哪个目录下面启动的,就会在哪个目录下面生成一个元数据库,如:第一次在/home/hadoop/下面启动的,就会在这个目录下面生成一个元数据库,                                    第二次在/home/hadoop/hive/目录下面启动的就会在这个目录下面生成一个新的数据库。这样在使用上会带来很多的不便。
                       解决方案:通常存我们自己创建的
MySQL 库(本地 或 远程)


解释器,编译器,优化器,执行器:
这四大组件完成
HQL 查询语句从词法分析,语法分析,编译,优化,以及生成查询计划的生成。生成的查询计划存储在HDFS 中,并随后由 MapReduce 调用执行。

执行流程:

HiveQL 通过命令行或者客户端提交,经过Compiler 编译器,运用 Metastore 中的元数据进行类型检测和语法分析,生成一个逻辑方案(logical plan),然后通过的优化处理,产生一个MapReduce 任务。

5. Hive RDBMS 的对比

数据库(写时模式)------数据仓库(读时模式)
1、模式问题: 数据库是  写时模式,    数据库仓库 是  读时模式
 数据库主要的操作针对 单挑记录的 CRUD
 数据库在插入数据的时候会进行各种校验:类型检查,int类型的字段如果插入例如qwer234这种数据,很明显会报错, 不让插入
 数据仓库是针对大批量数据的存储和计算, hive根本不管你导入进某张hive表的数据是不是合法,当HQL语句被翻译成MR程序执行的时候,那么就会校验这个数据了。
 

2、数据库存储的数据量小,存储精细
      数据仓库存储的数据量极大,粗粒度的存储机制