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 能够高效地处理不同类型和结构的数据,适应各种数据存储和分析需求。


相关推荐
酷爱码2 小时前
如何通过python连接hive,并对里面的表进行增删改查操作
开发语言·hive·python
Debug_TheWorld4 小时前
Hive学习
hive
weixin_307779136 小时前
Azure Data Factory ETL设计与调度最佳实践
数据仓库·性能优化·云计算·azure·etl
元6339 小时前
spark和hadoop之间的对比和联系
大数据·hadoop·spark
哥不是小萝莉10 小时前
Hadoop和Spark大数据挖掘与实战
hadoop·ai·spark
lix的小鱼12 小时前
spark和Hadoop之间的对比和联系
大数据·hadoop·spark
晴天彩虹雨14 小时前
Flink 数据清洗与字段标准化最佳实践
大数据·数据仓库·flink
TTBIGDATA15 小时前
如何将 Apache Hudi 接入 Ambari?完整部署与验证指南
大数据·hadoop·ambari·hudi·bigtop·湖仓·自定义组件集成
IT成长日记17 小时前
【Hive入门】Hive数据导出完全指南:从HDFS到本地文件系统的专业实践
hive·hadoop·hdfs·数据导出
向上的车轮18 小时前
数据湖DataLake和传统数据仓库Datawarehouse的主要区别是什么?优缺点是什么?
数据仓库