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 获取表结构和元数据信息。
  1. 发送元数据 (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):一种有序的数据集合,可以包含相同类型的多个元素。
  • 映射 (Maps):由键值对组成的集合,键和值可以是不同的数据类型。
  • 结构体 (Structs):包含多个不同数据类型字段的复合数据类型,类似于表的行。
  • 单位 (Units) :在某些情况下用于表示具体的数量单位,例如高精度数值的DECIMAL类型可用于处理货币等需要精确度的数据。

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

Hive运行模式主要取决于 数据节点的数量和规模。

  1. Local Mode(本地模式) :用于在单个数据节点上处理较小的数据集,适合数据量小且存在于本地机器上的场景,处理速度较快。

  2. MapReduce Mode(MapReduce模式):用于在多个数据节点上处理分布式的大数据集,适合数据量大且分布在多个节点上的场景,能更高效地处理大规模数据。

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

特性 Hive RDBMS
模式应用时机 读取时强制模式(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 能够高效地处理不同类型和结构的数据,适应各种数据存储和分析需求。


相关推荐
Data 3172 小时前
经典sql题(二)求连续登录最多天数用户
大数据·数据库·数据仓库·sql·mysql
小王是个弟弟3 小时前
HQL-计算不一样的 MUV
数据库·hive·sql
Data 3177 小时前
经典sql题(八)SQL 查询详细指南总结一
大数据·数据库·数据仓库·sql·mysql
我的K840912 小时前
解决Hive乱码问题
数据仓库·hive·hadoop
盼兮*12 小时前
Centos7环境下Hive的安装
大数据·数据仓库·hive·hadoop
Hello.Reader14 小时前
深入理解 ClickHouse 的性能调优与最佳实践
大数据·数据仓库·clickhouse·数据分析
阳爱铭1 天前
指标服务平台:全面解析
java·服务器·网络·hadoop·sql·hbase·数据库架构
SelectDB技术团队1 天前
查询性能提升 10 倍、存储空间节省 65%,Apache Doris 半结构化数据分析方案及典型场景
数据结构·数据仓库·elasticsearch·log4j·json
大数据深度洞察1 天前
中级练习[6]:Hive SQL订单配送与用户社交行为分析
大数据·数据仓库·hive·sql
Data 3171 天前
Hadoop生态圈拓展内容(二)
大数据·数据仓库·hive·hadoop