Hive基本原理

Hive是一个基于Hadoop的数据仓库工具,提供SQL查询功能来处理HDFS中的大规模数据。与关系数据库相比,Hive不支持实时查询和事务,但具有良好的可扩展性和容错性。Hive架构包括客户端组件(如CLI、Client和WUI)和服务端组件(如Driver和Metastore)。数据组织上,Hive支持内部表、外部表、分区和桶。在使用时,内部表适合完全在Hive内处理,外部表则适用于与其他工具共享数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Hive简介

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

2. hive与关系数据库的区别

  • 存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统;
  • hive使用的计算模型是mapreduce,而关系数据库则是自己设计的计算模型
  • 关系数据库都是为实时查询的业务进行设计的,而hive则是为海量数据做数据挖掘设计的,实时性很差
  • 对于更新操作,hive是通过查询将原表的数据进行转化最后存储在新表里,
  • Hive很容易扩展自己的存储能力和计算能力
  • hive不支持对某个具体行的操作,hive对数据的操作只支持覆盖原数据和追加数据。Hive也不支持事务和索引

3. hive的优缺点

优点

  • 可扩展性
  • 延展性,hive支持自定义函数,用户可以根据自己需求实现自己的函数
  • 良好的容错性,可以保障即使有节点出现问题,sql语句仍然可以完成执行
    缺点
  • Hive因为调用了MapReduce,效率降低了
  • Hive不支持事务

4. Hive架构

Hive架构
用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive

客户端组件
  • CLI:command line interface,命令行接口
  • Client :Hive的客户端
  • Thrift客户端:hive架构的许多客户端接口是建立在thrift客户端之上,包括JDBC和ODBC接口
  • WEBGUI:hive客户端提供了一种通过网页的方式访问hive所提供的服务
服务端组件
  • Driver组件:该组件包括Complier(编译器)、Optimizer(优化器)和Executor,(执行器)作用是完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
  • Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql Hive和MySQL之间通过MetaStore服务交互
    执行流程:HiveQL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数 据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生 一个 MapReduce 任务。
  • Thrift服务:thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。
hive的数据组织
  1. hive的存储结构包括数据库、表、视图、分区和表数据等,数据库,表,分区等等都对应HDFS上的一个目录,表数据对应hdfs对应目录下的文件。
  2. Hive中所有的数据都存储在HDFS中,没有专门的数据存储格式,因为Hive是读模式,可支持TextFile,SquenceFile,RCFile或者自定义格式等
  3. 只需要在创建表的的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据
    Hive 的默认列分隔符:控制符 Ctrl + A,\x01 Hive 的  
    Hive 的默认行分隔符:换行符 \n
  4. Hive中包含以下数据模型
  • database:在HDFS中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
  • table:在HDFS中表现所属database目录下一个文件夹
  • external table:与 table 类似,不过其数据存放位置可以指定任意 HDFS 目录路径
  • partition:在 HDFS 中表现为 table 目录下的子目录
  • bucket:在 HDFS 中表现为同一个表目录或者分区目录下根据某个字段的值进行 hash 散 列之后的多个文件
  • view:与传统数据库类似,只读,基于基本表创建
hive的常见表

Hive 中的表分为内部表、外部表、分区表和 Bucket 表

hive的内部表和外部表的区别

hive默认创建的是内部表

  • 删除内部表,删除表元数据和数据
  • 删除外部表,删除元数据,不删除数据
  • 内部表数据由Hive自身管理,外部表数据由HDFS管理;
  • 内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;
hive内部表和外部表的使用选择

如果数据的所有处理都在 Hive 中进行,那么倾向于 选择内部表,但是如果 Hive 和其他工具要针对相同的数据集进行处理,外部表更合适。  使用外部表访问存储在 HDFS 上的初始数据,然后通过 Hive 转换数据并存到内部表中

### Hive基本原理 Hive 是一种建立在 Hadoop 上的数据仓库工具,主要用于大规模数据分析。其核心设计目标是简化大数据处理流程并支持 SQL 类似的查询语言(称为 HiveQL)。以下是关于 Hive 基本原理的详细介绍: #### 1. **Hive 的架构** Hive 主要由以下几个模块构成[^4]: - **用户接口模块**: 提供多种方式让用户与 Hive交互,包括 CLI (Command Line Interface),HWI (Hive Web Interface),以及 JDBC/ODBC 接口等。 - **驱动模块**: 负责接收用户的输入指令,并将其转化为 MapReduce 或 Tez 等分布式计算任务来执具体来说,它包含了编译器、优化器器等功能组件。 - **元数据存储模块 (Metastore)**: 存储有关表定义的信息以及其他系统级元数据。这些信息通常被存放在外部的关系型数据库中,比如 MySQL。 #### 2. **Hive 工作流** 当一条 Hive 查询被执时,整个过程可以分为几个阶段: - **解析阶段**: 输入的 HiveQL 会被语法分析树所表示出来。 - **逻辑计划生成阶段**: 将上述抽象语法树转换成为未经优化过的逻辑执计划。 - **物理计划生成阶段暨优化阶段**: 对前面得到的初步方案进一步改进以提高效率;这一步骤可能涉及重新安排操作顺序或者合并某些步骤等等措施。 - **提交给底层框架运最终版本的任务描述文件**. #### 3. **存储机制** Hive 使用 HDFS 来作为自己的持久化层,在这里所有的表格都映射到了特定目录结构下的文件集合之上[^2]。每一个数据库对应于 /user/hive/warehoue 下面的一个子目录(.db),而每张表则又构成了该数据库路径下更深层次的小分类单元。 #### 4. **性能调优特性之一——偏斜连接优化** 为了应对可能出现的大规模键值分布不均情况(即所谓"数据倾斜"), Hive 支持了一种特殊的设置选项允许我们开启针对这种情况做出特别处理的功能开关 `set hive.optimize.skewjoin=true` 及阈值参数调整命令如 `set hive.skewjoin.key=skew_key_threshold`(默认值为10万)[^3]. ```sql SET hive.optimize.skewjoin = true; SET hive.skewjoin.key = 100000; ``` 以上便是对于 Hive 如何运作的基础概念阐述。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值