Hive Tutorial For Beginners

news/2024/12/22 2:35:46/

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



http://www.ppmy.cn/news/1520329.html

相关文章

EtherCAT 转 ModbusTCP 网关

设备简介 本产品是 EtherCAT 和 Modbus TCP 网关,使用数据映射方式工作。 本产品在 EtherCAT 侧作为 EtherCAT 从站,接 TwinCAT 、 CodeSYS 、 PLC等;在 ModbusTCP 侧做为 ModbusTCP 主站( Client )或从站…

揭秘推荐算法:深度学习如何读懂你的购物心思

时间:2024年09月03日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 音频:https://xima.tv/1_L8HH40?_sonic0 希望大家帮个忙!如果大家有工作机会,希望帮小蒋内推一下&#xff0c…

python判断语句(三)

下一篇持续更新中… 如有错误欢迎指正!!! 文章目录 前言学习内容 布尔类型和比较运算符布尔类型比较运算符总结 if语句的基本格式if语句的注意点总结案例 if else语句注意点总结案例 if elif else语句注意点总结案例 判断语句的嵌套语法格式…

【mysql】mysql目录结构和源码和mysql基础练习

mysql目录结构和源码的说明: 也就是之前说四个位置有提到的两个位置, 1软件安装位置bin 把bin目录加入环境变量就可以直接在命令行调用, "***\MySQL\MySQL Installer for Windows\bin" 2还有一个数据库文件的安装位置 &#…

PyTorch 2.4 import 报错问题解决

最近在新环境中安装了PyTorch 2.4版本,简单测试了import,发现直接报错: import torchA module that was compiled using NumPy 1.x cannot be run in NumPy 2.1.0 as it may crash. To support both 1.x and 2.x versions of NumPy, modules must be co…

Golang | Leetcode Golang题解之第381题O(1)时间插入、删除和获取随机元素-允许重复

题目: 题解: type RandomizedCollection struct {idx map[int]map[int]struct{}nums []int }/** Initialize your data structure here. */ func Constructor() RandomizedCollection {return RandomizedCollection{idx: map[int]map[int]struct{}{},}…

读写分离深度解析与MaxScale配置指南

读写分离介绍 读写分离是数据库架构中一项关键优化策略,它通过将数据库操作分为“读”和“写”两类,并分别部署到不同的服务 器集群上来实现性能提升和数据负载分散。在这种架构中,所有的写操作(如INSERT、UPDATE、DELETE等&#…

element-ui 日期选择器用value-format 带上“HH:mm:ss”的时候报错

1. 想用 element-ui 日期选择器取出 “yyyy-MM-dd HH:mm:ss” 格式的日期时间数据。 2. 用 value-format 带上“HH:mm:ss”的时候报错。 <el-form-item prop"time" label"结算时间&#xff1a;"><el-date-picker v-model"settleDO.time&qu…