Hive Tutorial For Beginners

news2024/11/14 13:43:08

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.coloradmin.cn/o/2092647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录——回文子串(Leetcode 647)

题目链接 我的题解(双指针) 思路: 当然,以下是对您提供的代码的解释: class Solution {public int countSubstrings(String s) {// 初始化回文子字符串的数量int count 0;// 遍历字符串的每个字符,使用…

无人机之电池篇

无人机电池作为无人机的重要组成部分,其性能、使用、保养及选择都至关重要。以下是对无人机电池的综合介绍: 一、无人机电池的基本参数 电池容量:电池容量直接影响无人机的续航能力。大容量电池,如5000mAh的电池,能提…

无人机道通布局的讲究详解!!!

一、通道分配与功能对应 基本通道:无人机遥控器通常至少包含四个基本通道,分别对应无人机的上下(升降)、左右(副翼)、前后(俯仰)和旋转(方向舵)控制。这些通…

关于报错 SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“ 的可能原因

1. 絮絮叨叨 学习或工作中,如果需要从头建立日志打印体系,笔者通常直接照抄之前的博客:《Java maven工程配置slf4j》,直接粘贴、复制相关依赖除了上述博客提到的slf4j-api、logback-classic,也看到过slf4j-simple、lo…

区域生长算法详解与Python实现

图像分割是计算机视觉中一个重要的任务,区域生长算法是其中的一种常见方法。本文将详细介绍区域生长算法的原理,并通过Python代码实现,带你一步步理解它的实际应用。 1. 区域生长算法简介 区域生长算法是一种基于像素相似性进行图像分割的方…

2025款宋L EV全面升级加量不加价,仅18.98万元起

8月30日,2024成都车展正式开幕,备受期待的比亚迪王朝网B级先锋猎装SUV——2025款宋L EV正式上市,搭载“天神之眼”高阶智能驾驶辅助系统DiPilot 100,e平台3.0、CTB、云辇-C三大明星技术,并新增外观内饰配色。凭借智驾、…

【2024】Datawhale X 李宏毅苹果书 AI夏令营 Task2

本文是关于李宏毅苹果书”线性模型“学习内容的记录。 线性模型 线性模型(linear model):将输入的特征 x x x(或 x \bold{x} x)乘上权重 ω \omega ω(或 ω \bold{\omega} ω),再…

Python简易IDE工作界面制作

、 休闲一下,学习编程还是要学习一些界面编程,能够根据需要制作图形操作界面,这样我们开发的程序才能方便操作和使用,同时获得更友好的人机交互体验。下面是一个用PyQt5制作的简易界面,供大学参考。如下图所示&a…

罪人的终幕(原题)

题目背景 而我承诺你,一切都将在一场盛大的,如同戏剧般的审判中结束…… 小小地旋转,轻轻地跳跃,然后便是「罪人」的谢幕。 题目描述 定义函数 𝑎(𝑥)a(x) 表示自然数 𝑥x 的不同的质因子的和。…

数据增强在Sentence Transformers中的作用:提高句子评分任务的性能

Sentence Transformers 是一个强大的 Python 库,它基于 Transformer 模型架构,如 BERT、RoBERTa 和 XLM-RoBERTa 等,用于学习和操作句子级别的向量表示。这个库特别适合于处理自然语言处理(NLP)任务,能够为…

实用好软-----电脑端 开源的视频无损剪切与合并工具

这个是一个开源项目LosslessCut 无损剪切就是基于关键帧的剪切,不需要重编码,因此速度非常快, 缺点就是切割时间无法达到非常精确,可能前后会有几秒的差距, 要做到精确的剪切,只能重编码。 LosslessCut在切…

学习之SQL语句之DQL(数据库查询语言)

DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录 查询关键字:SELECT 数据准备: CREATE TABLE emp ( id INT COMMENT “编号”, workno VARCHAR ( 10 ) COMMENT “工号”, NAME VARCHAR ( 10 ) COMME…

windows配置hadoop环境

目录 一、windows配置hadoop环境1、下载文件2、解压3、移动winutils.exe4、移动hadoop.dll5、配置代码内容 一、windows配置hadoop环境 1、下载文件 首先下载所需要的文件内容 共有三个文件,可以通过 这个链接 获得 2、解压 使用解压工具将 hadoop-3.0.0.tar.gz…

堆的时间复杂度分析

一,建堆的时间复杂度分析 堆是一颗完全二叉树,满二叉树又是一颗特殊的完全二叉树。 对于满二叉树来说,第一层的节点个数为2^0,第二层的节点个数为2^1,......所以可以得到第h层的节点个数为2^(h-1)。总结点个数N2^02^1...2^(h-1)2^h-1。那么就…

桌面日历工具

Desktop Calendar 官网 设置安装目录,防止默认装到C盘修改为自己想要安装的位置调整位置和大小

ip地址变化是什么意思?手机地址ip一直变化怎么办

IP地址作为互联网设备的唯一标识,‌其稳定性对于网络连接至关重要。‌然而,‌手机IP地址频繁变动可能带来一系列问题。‌本文将深入探讨IP地址变化的含义、‌IP地址频繁变动的原因,‌以及提供手机地址IP一直变化的有效应对策略。‌ 一、IP地址…

申请商标及版权时千万要注意字体!

近日有个渠道合作的朋友申请版权,就是几行文字,普推知产老杨一看这个字体有点特别,不是免费字体,一问也不是他们美工自己设计,是在网上找的字体,一检索果然是商业字体,赶紧建议换字体。 以前经常…

list类底层逻辑实现

list的底层逻辑是一个双向带头链表。那么list的底层其实就跟我们之前实现的带头双向链表相同,都是开辟一个一个单独的节点,最后再通过指针将各个单独的节点链接起来即可。 我们来类比之前编写的双向带头链表实现具体的内容。 创建一个list类的主体 就像我…

一个浏览器插件如何月入12万美元:深入了解 GoFullPage

一个浏览器插件如何月入12万美元:深入了解 GoFullPage 前言 GoFullPage 这个插件的诞生,源于其创作者 Peter Coles 的一个简单想法:解决一个他在日常开发工作中遇到的痛点。早在 2012 年,Coles 发现许多现有的网页截图工具无法完…

Qt 多个按钮,响应同一个点击事件

最近的一个需求&#xff0c;需要多个按钮响应同一个点击事件&#xff0c;并且要求能区分是哪个按钮点击的&#xff0c;看效果&#xff1a; 直接上代码&#xff1a; QList<QPushButton*> buttons findChildren<QPushButton*>();for (QPushButton* button : buttons…