当前位置: 首页 > news >正文

Hive 基础知识

目录

  • 1.基础概念
    • 1.1 定义
    • 1.2 组件
    • 1.3 元数据
    • 1.4 内部表和外部表
  • 2. Hive与关系型数据库的对比
  • 3. Hive 数据存储
  • 4. 参考文献

1.基础概念

1.1 定义

Hive是一个基于Hadoop的数据仓库基础设施工具,它可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL)。Hive可以将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储。

1.2 组件

HiveQL:Hive Query Language(HiveQL)是Hive的查询语言,它类似于SQL。HiveQL允许开发人员使用SQL语法来查询和分析数据,包括SELECT、JOIN、GROUP BY、ORDER BY等操作。

元数据存储:Hive使用元数据来描述和存储数据的结构和属性。元数据存储可以使用不同的后端,如Derby、MySQL等。元数据包括表的定义、分区信息、列的数据类型等。

执行引擎:Hive支持多种执行引擎,包括MapReduce、Tez和Spark。这些执行引擎用于执行HiveQL查询,并将其转化为底层任务进行数据处理和计算。

数据存储:Hive使用Hadoop分布式文件系统(HDFS)作为底层数据存储。它支持将数据以表的形式组织起来,可以在表上定义分区、分桶等数据组织方式。

用户定义函数(UDF):Hive允许开发人员编写自定义函数来扩展HiveQL的功能。这些用户定义函数可以使用Java、Python等编程语言编写,并在Hive查询中使用。

数据导入和导出:Hive提供了用于将数据导入到Hive表中和从Hive表中导出数据的机制。可以使用Hive自带的命令或工具,或者通过外部工具和技术,如Sqoop和Flume,进行数据导入和导出操作。

1.3 元数据

Hive中的元数据是指描述和管理数据表的数据,包括表的结构、分区方式、存储路径、表的基本信息等。元数据描述了数据的存储、表结构、分区信息等,使得Hive可以更好地管理和访问数据。

在Hive中,元数据通常存储在关系型数据库中,例如MySQL、PostgreSQL等,由Hive Metastore进行管理。元数据的存储结构可以由用户自定义,也可以使用默认的存储结构。

除了描述表的基本信息,元数据还记录了表的分区信息、数据存储路径等,这些信息可以帮助Hive更好地执行查询和优化性能。在Hive中,元数据是进行SQL查询优化和提高查询性能的重要依据。

1.4 内部表和外部表

内部表(Managed Table):Hive的内部表是指由Hive管理的表,这些表的数据存储在Hive的数据仓库中,删除内部表时,Hive不仅会删除表的元数据,还会删除表的数据。

外部表(External Table):Hive的外部表是指那些存储在Hive数据仓库之外的数据表,例如存储在HDFS或其他文件系统中的表。对于外部表,Hive只负责提供元数据,而不管理实际的数据。当删除外部表时,Hive只会删除表的元数据,而不会删除表数据。需要注意的是,外部表中的数据无法被Hive直接管理,因此不能在Hive中对外部表执行如DML操作或创建索引等操作。

2. Hive与关系型数据库的对比

HiveRDBMS
查询语言HQLSQL
数据存储HDFS分布式文件系统原始设备或本地文件
执行引擎MapReduceExcutor
执行延迟
数据规模大规模小规模
索引没有索引复杂索引

总的来说,Hive更适合大规模分布式数据处理和分析场景,而传统关系型数据库则更适合处理小型、结构化的事务性应用程序。

友情提示:本小节借鉴的是参考文献1

3. Hive 数据存储

Hive的数据存储基于Hadoop文件系统(HDFS),表中的数据在HDFS中都有相应的目录用来存储数据,每个表在HDFS中都有自己的目录,表的数据都存放在这个目录中。例如,如果有一个表temp_hive,那么在HDFS中会创建/user/hive/warehouse/temp_hive目录(这里假定hive.metastore.warehouse.dir配置为/user/hive/warehouse),temp_hive表所有的数据都存放在这个目录中。

Hive的存储结构主要包括数据库、文件、表、视图等,可以直接接入文本文件(.txt)中,在创建表的时候指定Hive数据的列分隔符和行分隔符。Hive的表和关系型数据库中的表在概念上很类似,每个表在HDFS中都有相应的目录用来存储表的数据。

4. 参考文献

1.Hive基础知识

http://www.lryc.cn/news/164902.html

相关文章:

  • 【数据结构】树的基础知识及三种存储结构
  • ABB 3BHB003688R0101接口模块
  • 精简 jre 涉坑记录
  • Java程序员学习算法路线规划总结
  • 火山引擎 ByteHouse:两个关键技术,揭秘 OLAP 引擎中的数据导入技术
  • 深挖“范围经济”穿越产业周期:TCL电子持续繁荣的密码
  • Elasticsearch:使用 ESRE 和生成式 AI 了解 TLS 日志错误
  • Swing程序设计(3)JDialog窗体
  • 类和对象(1)
  • 学会用命令行创建uni-app项目并用vscode开放项目
  • java.lang.ClassCastException: android.os.BinderProxy cannot be cast to ...
  • AIGC(生成式AI)试用 3 -- 专业主题
  • rsyslog-日志管理 logrotate-日志轮转
  • 类和对象续
  • SpringCloud:Feign实现微服务之间相互请求
  • LeetCode 1359. Count All Valid Pickup and Delivery Options【动态规划,组合数学】1722
  • [杂谈]-从硬件角度理解二进制数
  • Fast-DDS 服务发现简要概述
  • 基于spingboot的websocket订阅、广播、多人聊天室示例
  • Linux mac Windows三系统 局域网文件共享方法
  • Java——比较器
  • 【数据结构】初识泛型
  • 代码随想录--哈希--有效的字母异位词
  • MySQL——数据的增删改
  • 云服务器与http服务器
  • golang教程 beego框架笔记一
  • 【深度学习】Mini-Batch梯度下降法
  • AI项目六:WEB端部署YOLOv5
  • 敲代码常用快捷键
  • MyBatis: 分页插件PageHelper直接传递分页参数的用法