Hive概要

Hive概要

一:产生背景

Hive概要 虽然hadoop有效的解决了大规模数据的存储和统计的问题,但是MapReduce编程十分繁琐,在大多情况下,每个MapReduce程序需要包含Mapper、Reduceer和一个Driver,之后需要打成jar包扔到集群上运 行。如果mr写完之后,且该项目已经上线,一旦业务逻辑发生了改变,可能就会带来大规模的改动代码,然后重新打包,发布,非常麻烦(这种方式,也是最古老的方式),而hive的出现有效的解决的这些问题,hive为数据加上了schema,可以直接通过sql的方式处理数据,hive把HQL转化为了mapreduce任务。

二:Hive是什么

  • hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
  • Hive是建立在Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的mapper 和 reducer 无法完成的复杂的分析工作。

三:Hive的优缺点

优点:延展性高 使用扩展性 自定义函数
缺点:
1.不支持delete和updata,支持insert但是效率低
2.不支持事务
3.不支持实时查询

四:hive的架构

hive在hadoop中的位置:

Hive概要hive的架构图:
Hive概要

1) 用户接口层

接口:

  1. CLI:命令行界面,Cli 启动的时候,会同时启动一个 Hive 副本。
  2. JDBC客户端:封装了Thrift,java应用程序,可以通过指定的主机和端口连接到在另一个进程中运行的hive服务器
  3. ODBC客户端:ODBC驱动允许支持ODBC协议的应用程序连接到Hive。
  4. WUI 接口:是通过浏览器访问 Hive

2)Thrift Server 跨语言服务层

基于socket通讯,支持跨语言。Hive Thrift服务简化了在多编程语言中运行Hive的命令。绑定支持C++,Java,PHP,Python和Ruby语言。

3)核心驱动层

  • 解释器:将sql语句转化为抽象的语法树,
  • 编译器:将抽象语法树编译为mapreduce任务,map和reduce模板
  • 优化器:对编译结果进行优化
  • 执行器:对优化结果最终执行

4)元数据层

元数据:描述数据的数据
hive元数据:描述表存储的真实数据的数据
hive存储:
表数据:
表中存储的数据不包括表结构数据,例如数据的描述年龄,姓名,班级…
元数据
用于描述表述表数据的数据,例如数据的描述年龄,姓名,班级…
数据库信息
表的名字,表的列和分区及其属性,表的属性,表的数据所在目录等。
元数据用于存放Hive库的基础信息,它存储在关系数据库中,如 mysql、derby(单用户模式中可以使用,不适用与生产)
表数据存储在 HDFS 中,大部分的查询由 MapReduce 完成

五:数据库和数据仓库的区别

数据仓库:

  • 面向主题的
  • 用于存储海量数据的,对海量数据进行精细化的管理

数据仓库 和 数据库的区别从三方面说:
概念:
数据仓库 更加倾向于数据管理,并且针对的是海量数据;数据库 存储小批量的结果数据
应用场景上:
数据仓库:
olap:On line Analysis Processing 分析型处理–联机分析处理
擅长数据分析 查询
hive中不支持delete 和 update,支持insert但效率极低
数据库:
oltp:On line Transaction Processing 操作型处理–联机事务处理
增insert 删delete 改update
模式上:
数据仓库:读模式
数据读取的时候,进行数据校验
数据库:写模式
数据写入的时候进行数据校验
事务支持上:
数据库有事务概念
数据仓库 不支持事务的