0


Hive Tutorial For Beginners

Hive Tutorial For Beginners

一、Hive历史(History of Hive)

Facebook 在面对日益增长的大数据时,选择了 Hadoop 作为解决方案。

但问题在于,许多用户并不熟悉 Java 或其他编程语言,这使得使用 Hadoop 的 MapReduce 变得复杂且不便。
在这里插入图片描述

为了简化这一过程,Hive 应运而生

Hive 的设计灵感来自于 SQL,它引入了表格和列的概念,让用户可以像使用数据库一样操作数据。
在这里插入图片描述

这样,用户无需编写冗长复杂的 MapReduce 代码,只需用 SQL 查询就能处理数据。这种改变极大地提高了 Hadoop 的易用性,让更多人能够轻松上手和管理大数据。


二、Hive是什么?(What is Hive?)

Hive 是一个数据仓库系统,用于查询和分析存储在 Hadoop 分布式文件系统(HDFS)中的大型数据集。

Hive使用一种名为 HiveQL 的查询语言,这种语言类似于 SQL,简化了数据操作过程。

在这里插入图片描述

基本流程:

  1. 用户编写 HiveQL 查询 - 用户用 HiveQL 编写查询语句,这种语言与 SQL 相似。
  2. Hive 将查询转换为 MapReduce 任务 - Hive 自动将这些查询转换为 MapReduce 任务。
  3. MapReduce 任务执行数据处理 - 这些任务在 Hadoop 集群上运行,完成数据的处理和分析。

三、Hive架构(Architecture of Hive)

在这里插入图片描述

1. Hive 客户端接口

1.1 Hive CLI (Command Line Interface)
  • 定义:一个命令行工具,用户可以通过它直接与 Hive 交互。
  • 作用:执行 HiveQL 查询、管理数据库和表格,以及查看查询结果。

在这里插入图片描述

1.2 Hive Web Interface
  • 定义:基于 Web 的界面,用户通过浏览器访问。
  • 作用:提供一个可视化的操作平台,用于提交查询、管理数据以及查看结果。

2. Hive API 接口

2.1 Hive Thrift Client
  • 定义:通过 Apache Thrift 协议与 Hive 进行通信的客户端。
  • 作用:允许不同编程语言的应用程序(如 Java、Python、C++)通过 Thrift 协议与 Hive 进行交互。在这里插入图片描述
2.2 Hive JDBC Driver
  • 定义:Java 数据库连接(JDBC)驱动程序,用于连接 Hive 数据库。
  • 作用:允许 Java 应用程序通过 JDBC API 执行 HiveQL 查询,并处理查询结果。在这里插入图片描述
2.3 Hive ODBC Driver
  • 定义:开放数据库连接(ODBC)驱动程序,用于连接 Hive。
  • 作用:使各种应用程序能够通过 ODBC 接口访问 Hive 数据库,执行查询和处理结果。

在这里插入图片描述

3. Hive Server

  • 定义:Hive Server 是 Hive 的核心服务,负责处理客户端请求。
  • 作用:它接收来自客户端的查询请求,并将这些请求转发给 Hive Driver。

在这里插入图片描述

4. Hive Driver

  • 定义:Hive Driver 负责查询的处理和执行。

在这里插入图片描述

  • 作用:将 HiveQL 查询转换成 MapReduce 作业或其他计算任务,并将结果返回给 Hive Server。

在这里插入图片描述

  1. Compiler(编译器)- 作用:将 HiveQL 查询传递给编译器。- 过程:在编译阶段,查询会被检查和分析,以确保语法和语义正确。
  2. Optimizer(优化器)- 作用:对编译后的查询进行优化。- 过程:生成一个优化后的逻辑计划,这个计划以 MapReduce 和 HDFS 任务的图形形式表现。
  3. Executor(执行器)- 作用:执行优化后的任务。- 过程:在最终步骤,执行器运行生成的任务并处理实际的数据操作。

5. Metastore

  • 定义:Hive Metastore 是一个集中式的元数据仓库。
  • 作用:存储 Hive 表的结构信息、数据位置和分区信息。通常使用关系型数据库(如 Apache Derby(Hive默认的元数据存储数据库,不支持多用户并发访问。)、**MySQL(支持多用户并发访问,生产环境使用的较多。)**、PostgreSQL)来存储元数据。在这里插入图片描述

6. Processing and Resource Management

  • MapReduce v1 / MapReduce v2- 定义:MapReduce 是 Hadoop 的计算模型,用于处理和计算数据。- 作用:Hive 将查询转换为 MapReduce 作业以进行分布式计算。MapReduce v2(YARN)提供了改进的资源管理和调度能力。
  • Tez- 定义:Apache Tez 是一个用于改进 Hadoop 作业的执行框架。- 作用:Tez 提供了比 MapReduce 更高效的执行模型,优化了 Hive 查询的性能。

在这里插入图片描述

  • YARN- 定义:Yet Another Resource Negotiator(YARN)是 Hadoop 的资源管理器。- 作用:负责资源的分配和管理,为 Hive 作业提供计算资源。

7. Distributed Storage

  • HDFS- 定义:Hadoop Distributed File System(HDFS)是 Hadoop 的分布式存储系统。- 作用:存储 Hive 表的数据,提供高吞吐量的数据访问。

在这里插入图片描述

四、Hive 数据流动(DataFlow in Hive)

在这里插入图片描述
Hive 数据流动过程

  1. 用户查询 (executeQuery)- 描述:用户通过 Hive 客户端提交查询请求。
  2. 驱动程序 (Driver)- 步骤: - Compiler:将查询传递给编译器。- 操作:编译器检查和分析查询的正确性,并生成执行计划。
  3. 获取元数据 (getMetadata)- 描述:驱动程序请求 Hive Metastore 获取表结构和元数据信息。

在这里插入图片描述
4. 发送元数据 (sendMetadata)

  • 描述:将获取到的元数据传递给编译器以便生成执行计划。
  1. 发送执行计划 (sendPlan)- 描述:驱动程序将生成的执行计划发送到执行引擎。
  2. 执行计划 (executePlan)- 描述:执行引擎(通常是 MapReduce 或其他计算框架)根据执行计划进行数据处理。
  3. 元数据操作 (Metadata ops)- 描述:在执行过程中,可能会对 Hive Metastore 进行操作,例如更新表的统计信息或数据结构。

在这里插入图片描述

五、Hive数据建模(Hive Data Modelling)

在这里插入图片描述
表 (Tables)

  • 描述:在 Hive 中,表的创建方式与关系数据库管理系统 (RDBMS) 类似。可以定义表的结构并将数据加载到表中。

在这里插入图片描述
分区 (Partitions)

  • 描述:表中的数据可以按照分区键(Partition Key)进行分区。这种方式将表中的数据按特定条件(如日期、地区等)进行组织,从而使得数据查询更加高效。例如,将销售数据按月份进行分区。(避免全表扫描,查询某个日期的数据,直接查分区表即可。)在这里插入图片描述

分桶 (Buckets)

  • 描述:在分区的基础上,数据还可以进一步分为若干个桶(Buckets)。桶将分区内的数据进行进一步划分,目的是提升查询效率和性能。例如,将分区内的数据按哈希值划分为多个桶。

六、Hive数据类型(Hive Data Types)

在这里插入图片描述

  1. 原始数据类型 (Primitive Data Types)
  • **数值类型 (Numeric Data Types)**:包括 INTBIGINTFLOATDOUBLE 等,用于表示不同范围的数值。

在这里插入图片描述

  • **字符串类型 (String Data Type)**:包括 STRINGVARCHARCHAR,用于表示文本数据。

在这里插入图片描述

  • **日期/时间类型 (Date/Time Data Type)**:包括 DATETIMESTAMP,用于表示日期和时间。

在这里插入图片描述

  • **其他类型 (Miscellaneous Data Type)**:如 BOOLEAN,用于表示布尔值。在这里插入图片描述
  1. 复杂数据类型 (Complex Data Types)
  • **数组 (Arrays)**:一种有序的数据集合,可以包含相同类型的多个元素。

3274242850988411635d6db.png)

  • **映射 (Maps)**:由键值对组成的集合,键和值可以是不同的数据类型。

在这里插入图片描述

  • **结构体 (Structs)**:包含多个不同数据类型字段的复合数据类型,类似于表的行。

在这里插入图片描述

  • **单位 (Units)**:在某些情况下用于表示具体的数量单位,例如高精度数值的DECIMAL类型可用于处理货币等需要精确度的数据。

在这里插入图片描述

七、Hive运行模式(Different modes of Hive)

Hive运行模式主要取决于 数据节点的数量和规模。
在这里插入图片描述

  1. Local Mode(本地模式):用于在单个数据节点上处理较小的数据集,适合数据量小且存在于本地机器上的场景,处理速度较快。在这里插入图片描述
  2. MapReduce Mode(MapReduce模式):用于在多个数据节点上处理分布式的大数据集,适合数据量大且分布在多个节点上的场景,能更高效地处理大规模数据。

八、Hive与传统数据库区别(Difference between Hive and RDBMS)

在这里插入图片描述
特性HiveRDBMS模式应用时机读取时强制模式(Schema on Read):数据存储时不强制定义模式,查询时才应用模式。例如:存储日志文件时不需要定义结构,查询时可以指定数据格式。写入时强制模式(Schema on Write):数据在存储之前必须符合预定义的模式。例如:创建表时需要定义列名、数据类型等结构。数据规模****通常在PB级别:适合处理大规模数据集,如社交媒体数据、网页日志等。例如:Facebook 使用 Hive 处理大量用户数据。通常在TB级别:适合中小规模的数据集,如交易数据、客户信息等。例如:银行系统使用 RDBMS 管理账户数据。操作模式****写一次,读多次:数据一旦写入后会被频繁读取但很少修改。例如:分析用户行为数据时,数据被写入一次然后频繁读取生成报告。读写多次:数据可以被频繁读取和写入。例如:电子商务网站的订单系统需要频繁读写订单数据。功能****数据仓库:Hive 本质上是一个数据仓库,是一个大数据分析平台,虽然支持 SQL 查询,但主要用于大数据分析,而非事务处理。关系型数据库:处理结构化数据并支持事务处理(ACID 属性),适合日常的业务数据管理和事务处理。扩展性****高扩展性:能够通过添加更多节点来处理更大规模的数据,成本相对较低。例如:使用 Hadoop 集群扩展 Hive 的计算能力。扩展性相对较差:通常需要高成本的硬件升级或复杂的分布式架构来扩展。例如:扩展 SQL Server 可能需要昂贵的服务器和存储设备。

九、Hive特点(Features of Hive)

在这里插入图片描述

  1. 表结构:Hive 使用表的方式来组织数据,这与传统的关系型数据库系统(RDBMS)类似。用户可以创建、修改和查询表,表的列和数据类型也可以定义,这使得 Hive 的使用更符合 SQL 的传统概念,易于理解和上手。
  2. 并发查询:Hive 支持多个用户同时进行数据查询。通过 HiveQL(Hive 查询语言),用户可以并发执行查询操作,这对于大规模的数据分析和报告生成非常有用。

在这里插入图片描述

  1. 简化语言:HiveQL 是一种类 SQL 语言,设计上更接近于传统 SQL 语法,因此用户不需要掌握复杂的编程代码。它简化了数据操作和分析的过程,使得编写查询变得更加直观和高效。
  2. 数据格式支持:Hive 能够处理多种数据格式,包括文本格式、压缩格式(如 Gzip)、列式存储格式(如 Parquet 和 ORC)。这种灵活性使得 Hive 能够高效地处理不同类型和结构的数据,适应各种数据存储和分析需求。


本文转载自: https://blog.csdn.net/weixin_48935611/article/details/141687644
版权归原作者 喻师傅 所有, 如有侵权,请联系我们删除。

“Hive Tutorial For Beginners”的评论:

还没有评论