hive基础理论知识

本文介绍了Hive作为基于Hadoop的数据仓库工具,它将结构化的数据映射为数据库表,使用HQL进行查询,底层数据存储在HDFS上。Hive具有良好的扩展性和容错性,但不支持实时查询和事务处理。文章对比了Hive与RDBMS的特性,并详细阐述了Hive的架构,包括用户接口、Driver组件、元数据存储系统和执行流程。此外,还讨论了Hive的表类型(内部表、外部表、分区表和Bucket表)及其应用场景。

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

目录

hive简介

什么是hive

hive的优点

hive的缺点

hive和RDBMS(关系型数据库)的对比

Hive的架构​​

执行流程

Hive的数据组织


  • hive简介

    • 什么是hive

      • Hive由Fackbook实现并开源
      • 是基于Hadoop的数据仓库工具
      • 可以将结构化的数据映射成一张数据库表
      • 有HQL(hive的sql)查询
      • 底层数据存储在hdfs上面
      • 本质是将hql转换成MapReduce任务进行处理和计算Hdfs上面的结构化数据
      • 适用于离线的批量数据计算(数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策)
      • Hive依赖于HDFS存储数据,hive将HQL转换成MapReduce执行,所以说Hive是基于H到哦呸的一个数据仓库工具,实质上是一款基于HDFS的MapReduce计算框架,堆存处在HDFS中的数据进行分析和管理。
    • hive的优点

      • 可扩展行,横向扩展
      • 延展性
      • 良好的容错性
    • hive的缺点

      • hive不支持记录级别的增删改操作
      • hive的查询延时比较严重
      • hive不支持事务(主要用来做OLAP(练级分析处理),不能做OLTP(联机事务处理))
    • hive和RDBMS(关系型数据库)的对比

      • hive是适合用来做海量离线数据的统计分析,也就是数据仓库。
      • Hive的架构

        • 用户接口
          • CLI:shell命令,使用hive命令行与hive进行交互
          • JDBC/ODBC:是Hive基于JDBC操作提供的客户端
          • Web UI:通过浏览器访问hive
        • 跨语言服务
          • Thrift Server:Thrift是Facebook开发的一个软件框架,能支持不同的变成语言调用hive的接口
        • 底层的Driver
          • Driver组件完成HQL查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行计划的生成。生成的逻辑执行计划存储在HDFS中,并随后由MapReduce调用执行
          • hive的核心是驱动引擎,驱动引擎由四部分组成:
            • 解释器:将HiveSQL语句转换为抽象语法数(AST)
            • 编译器:将语法树编译为逻辑执行计划
            • 优化器:对逻辑执行计划进行优化
            • 执行器:调用底层的运行框架执行逻辑执行计划
        • 元数据存储系统
          • 元数据,就是存储在hive中的数据的描述信息
          • 忽略中的元数据包括:表名、表的列和分区及其属性,表的属性(内部表和外部表),表的数据所在目录
          • Metastore默认存在自带的Derby数据库中。缺点就是不适合读用户操作,并且数据存储目录不固定。通常都是使用mysql库
          • hive和mysql之间通过MetaStore服务进行交互
        • 执行流程

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

          • hive的存储结构包括数据库、表、视图、分区和表数据等。数据库、表、分区等都对应HDFS上面的一个目录。表数据对应HDFS对应目录下的文件
          • hive中所有的数据都存储在HDFS中,没有专门的数据存储格式;hive是读模式,可支持TextFile、SequenceFile、RCFile活自定义格式等
          • 创建表的时候定义好列分隔符和行分隔符,hive就可以解析数据
            • 默认列分隔符:Ctrl+A、\x01
            • 默认的行分隔符:\n
          • hive中包含以下数据模型
            • database:在HDFS中表现为$(hive.metastore.warehouse.dir)目录下的一个文件夹
            • table:在HDFS中表现所属database目录下的一个文件夹
            • external table :与table类似,不过他的数据存放位置可以指定任意HDFS目录路径
            • partition:在HDFS中表现为table目录下的子目录
            • bucket:在HDFS中表现为同一表目录或者分区目录下根据某个字段的值进行hash散列之后的多个文件
            • view:与传统数据库类似,只读,基于基本表创建
          • hive的元数据存储在RDBMS中,除元数据外的其他所有数据都基于HDFS存储。默认情况下,hive元数据保存在内嵌的Derby数据库中,只能允许一个会话链接,只适合简单的测试。实际生产环境中不适用,为了支持多用户会话,则需要一个独立的元数据库,使用MySQL作为源数据库,hive内部对MySQL提供了很好的支持
          • hive中的表分为内部表、外部表、分区表和Bucket表
            • 内部表和外部表的区别
              • 删除内部表,删除表的元数据和数据
              • 删除外部表,删除元数据,不删除数据
            • 内部表和外部表的使用选择
              • 大多数情况下,他们的区别不明显,如果数据的所有处理都在hive中进行,那么倾向于选择内部表,但是如果hive和其他工具要针对相同的数据集进行处理,外部表更合适
              • 使用外部表访问存储在HDFS上的初始数据,然后通过hive转换数据并存到内部表中
              • 使用外部标的场景是针对一个数据据的多个不同的Schema
              • 通过外部表和内部表的区别和使用选择的对比可以看出来,hive其实仅仅只是对存储在HDFS尚德数据提供了一种新的抽象。而不是管理存储在HDFS上的数据。所以不管创建内部表还是外部表,都可以对hive表的数据存储目录中的数据进行增删操作
            • 分区表和分桶表的区别:
              • hive数据表可以根据某些字段进行分区操作,细化数据管理,可以让部分查询更快。同时表和分区也可以进一步被划分为Buckets,分桶表的原理和MapReduce表城中的HashPartitioner的原理类似
              • 分区和分桶都是细化数据管理,但是分区表是手动添加分区,由于hive是读模式,所以对添加分区的数据不做模式校验,分桶表中的数据是按照某些分桶字段进行hash散列形成的多个文件,所以数据的准确性也高很多

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值