Apache Hive 入门

news2024/11/25 19:22:23

目录

一、Apache Hive概述

1.1 什么是Hive

​1.2 为什么使用 Hive 

1.3 Hive 和 Hadoop 关系 

二、场景设计:如何模拟实现Hive功能 

2.1 如何模拟实现 Apache Hive 的功能 

2.2 映射信息记录 

2.3 SQL 语法解析、编译 

2.4 最终效果 

​三、Apache Hive 架构、组件 

3.1 架构图 

​3.2 组件 

3.2.1 用户接口 

3.2.2 元数据存储 

3.2.3 Driver 驱动程序,包括语法解析器、计划编译器、优化器、执行器 

3.2.3 执行引擎 

四、Apache Hive 数据模型 

4.1 Data Model 概念 

4.2 Databases 数据库 

4.3 Tables 表 

4.4 Partitions 分区 

4.5 Buckets 分桶 

五、Apache Hive 是要取代 MySQL 吗? 

5.1 思考

5.2 Hive 和 MySQL 对比


 

一、Apache Hive概述

1.1 什么是Hive

        Apache Hive 是一款建立在 Hadoop 之上的开源数据仓库系统,可以将存储在 Hadoop 文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似 SQL 的查询模型,称为 Hive 查询语言(HQL),用于访问和分析存储在 Hadoop 文件中的大型数据集。

        Hive 核心是将 HQL 转换为 MapReduce 程序,然后将程序提交到 Hadoop 群集执行。Hive 由 Facebook 实现并开源。

1.2 为什么使用 Hive 

  • 使用 Hadoop MapReduce 直接处理数据所面临的问题

人员学习成本太高,需要掌握 java 语言;

MapReduce 实现复杂查询逻辑开发难度太大。

  • 使用 Hive 处理数据的好处

操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手);

避免直接写MapReduce,减少开发人员的学习成本;

支持自定义函数,功能扩展很方便;

背靠 Hadoop,擅长存储分析海量数据集。

1.3 Hive 和 Hadoop 关系 

        从功能来说,数据仓库软件,至少需要具备下述两种能力:存储数据的能力、分析数据的能力 Apache Hive 作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。只不过 Hive 并不是自己实现了上述两种能力,而是借助 Hadoop

        Hive 利用 HDFS 存储数据,利用 MapReduce 查询分析数据。这样突然发现 Hive 没啥用,不过是套壳 Hadoop 罢了。其实不然,Hive 的最大的魅力在于用户专注于编写 HQLHive 帮您转换成为 MapReduce 程序完成对数据的分析

二、场景设计:如何模拟实现Hive功能 

2.1 如何模拟实现 Apache Hive 的功能 

        如果让您设计 Hive 这款软件,要求能够实现用户编写 sql 语句,Hive 自动将 sql 转换MapReduce 程序,处理位于 HDFS 上的结构化数据。如何实现

在 HDFS 文件系统上有一个文件,路径为 /data/china_user.txt,其内容如下:

 

需求:统计来自于上海年龄大于 25 岁的用户有多少个? 

2.2 映射信息记录 

        映射在数学上称之为一种对应关系,比如 y=x+1,对于每一个 的值都有与之对应的 的值。在 hive 中能够写 sql 处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚。映射信息专业的叫法称之为元数据信息(元数据是指用来描述数据的数据 metadata)。

具体来看,要记录的元数据信息包括:

  • 对应着哪个文件(位置信息)

  • 的列对应着文件哪一个字段(顺序信息)

  • 文件字段之间的分隔符是什么

2.3 SQL 语法解析、编译 

        用户写完 sql 之后,hive 需要针对 sql 进行语法校验,并且根据记录的元数据信息解读 sql 背后的含义,制定执行计划。并且把执行计划转换成 MapReduce 程序来执行,把执行的结果封装返回给用户。 

  • 重点理解下面两点:

Hive 能将数据文件映射成为一张表,这个映射是指什么?

文件和表之间的对应关系

Hive 软件本身到底承担了什么功能职责

SQL 语法解析编译成为 MapReduce

2.4 最终效果 

        基于上述分析,最终要想模拟实现的 Hive 的功能,大致需要下图所示组件参与其中。从中可以感受一下 Hive 承担了什么职责,当然,也可以把这个理解为 Hive 的架构图。

三、Apache Hive 架构、组件 

3.1 架构图 

3.2 组件 

3.2.1 用户接口 

        包括 CLIJDBC/ODBCWebGUI。其中,CLI(command line interface)为 shell 命令行;Hive 中的 Thrift 服务器允许外部客户端通过网络与 Hive 进行交互,类似于 JDBC 或 ODBC 协议。WebGUI 是通过浏览器访问 Hive 

3.2.2 元数据存储 

        通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 

3.2.3 Driver 驱动程序,包括语法解析器、计划编译器、优化器、执行器 

        完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。 

3.2.3 执行引擎 

        Hive 本身并不直接处理数据文件。而是通过执行引擎处理。当下 Hive 支持 MapReduceTezSpark 3 种执行引擎。 

四、Apache Hive 数据模型 

4.1 Data Model 概念 

        数据模型:用来描述数据、组织数据和对数据进行操作,是对现实世界数据特征的描述。Hive 的数据模型类似于 RDBMS 库表结构,此外还有自己特有模型。Hive 中的数据可以在粒度级别上分为三类:

  • Table

  • Partition 分区

  • Bucket 分桶

4.2 Databases 数据库 

        Hive 作为一个数据仓库,在结构上积极向传统数据库看齐,也分数据库(Schema),每个数据库下面有各自的表组成。默认数据库 default

        Hive 的数据都是存储在 HDFS 的,默认有一个根目录,在 hive-site.xml 中,由参数hive.metastore.warehouse.dir 指定。默认值为 /user/hive/warehouse。因此,Hive 中的数据库在HDFS 上的存储路径为:${hive.metastore.warehouse.dir}/databasename.db

比如,名为 test 的数据库存储路径为:/user/hive/warehouse/test.db

4.3 Tables  

        Hive 表与关系数据库中的表相同。Hive 中的表所对应的数据通常存储在 HDFS ,而表相关的元数据是存储在 RDBMS 

Hive 中的表的数据在 HDFS 上的存储路径为:${hive.metastore.warehouse.dir}/databasename.db/tablename

比如 test 的数据库下 t_user 表存储路径为:/user/hive/warehouse/test.db/t_user

4.4 Partitions 分区 

        Partition 分区是 hive 的一种优化手段表。分区是指根据分区列(例如“日期 day”)的值将表划分为不同分区。这样可以更快地对指定分区数据进行查询。

        分区在存储层面上的表现是:table 表目录下以子文件夹形式存在。一个文件夹表示一个分区。子文件命名标准:分区列=分区值

        Hive 还支持分区下继续创建分区,所谓的多重分区。关于分区表的使用和详细介绍,后面模块会单独展开。

4.5 Buckets  

        Bucket 分桶表是 hive 的一种优化手段表。分桶是指根据表中字段(例如“编号 ID”)的值经过 hash 计算规则将数据文件划分成指定的若干个小文件

分桶规则:hashfunc(字段) % 桶个数,余数相同的分到同一个文件。

        分桶的好处是可以优化 join 查询和方便抽样查询。Bucket 分桶表在 HDFS 表现为同一个表目录下数据根据 hash 散列之后变成多个文件。关于桶表以及分桶操作,后面模块会单独展开详细讲解。

五、Apache Hive 是要取代 MySQL  

5.1 思考

  1. 从数据模型上来看 Hive 和 MySQL 非常相似,库,表字段之类的,难道 Hive 也是数据库?
  2. Hive 依赖 Hadoop,理论上可以无限存储,难道是大型数据库?取代 MySQL 的?

5.2 Hive 和 MySQL 对比

        Hive虽然具有 RDBMS 数据库的外表,包括数据模型、SQL 语法都十分相似,但应用场景却完全不同

        Hive 只适合用来做海量数据的离线分析。Hive 的定位是数据仓库,面向分析的 OLAP 系统。因此时刻告诉自己,Hive 不是大型数据库,也不是要取代 MySQL 承担业务数据处理

上一篇文章:大数据 Hive 数据仓库介绍_Stars.Sky的博客-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023970.html

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

相关文章

【链表】K 个一组翻转链表-力扣 25 题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

【前端知识】Three 学习日志(九)—— 阵列立方体和相机适配体验

Three 学习日志(九)—— 阵列立方体和相机适配体验 一、双层for循环创建阵列模型 //创建一个长方体几何对象Geometry const geometry new THREE.BoxGeometry(100, 100, 100); //材质对象Material const material new THREE.MeshLambertMaterial({col…

卷运维不如卷网络安全

最近发现很多从事运维的选择了辞职,重新规划自己的职业发展方向。运维工程师这个岗位在IT行业里面确实是处于最底层的,不管什么环节出现问题,基本都是运维背锅。背锅也就罢了,薪资水平也比不上别的岗位。 一般运维的薪资水平大多数…

【Spark】win10配置IDEA、saprk、hadoop和scala

终于,要对并行计算下手了哈哈哈。 一直讲大数据大数据,我单次数据处理量大概在1t上下,是过亿级的轨迹数据。 用python调用multiprogress编写的代码,用多线程也要一个多月跑完。 我对这个效率不太满意,希望能快一点再快…

Mac cocoapod 3分钟安装教程( 国内镜像源方法)

参考链接:2023最新总结,Mac下使用Homebrew完全指南! - 知乎 1.打开终端, 执行: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 2.运行,可以选择清…

十、性能测试之数据库测试

性能测试之数据库测试 一、 数据库分类二、 mysql安装及密码的修改1、安装:数据库的版本 mysql5.7版方法1:直接安装方法2:使用rpm包安装方法3:docker方式安装 2、修改数据库的密码3、创建库4、创建表 三、存储引擎1、InnoDB特点 2…

【Java 基础篇】Java字节打印流详解:处理二进制数据的利器

当你需要将数据输出到文件或其他输出目标时,Java中的字节打印流是一个非常有用的工具。本文将详细介绍Java字节打印流,包括它的基本用法、常用方法以及一些实际应用示例。 什么是字节打印流? 在Java中,字节打印流是用于将字节数…

【MATLAB】安装 shared_slreportgen_reportexplorer_common 时检测到以下错误

解决方法 下载matlab的时候以及安装的时候关闭杀毒软件。 然后也可以把simulink和DSP以及signal processing 相关的toolbox全部不勾选(推荐) 这两个工具箱没有其实没啥大的影响,就是信号处理这块的增强功能没有了 (来自&#xff…

【Windows】你所使用的用户账户没有启用此任务的权限

【Windows】你所使用的用户账户没有启用此任务的权限 1. 故障现象 有一台腾讯云的服务器更新补丁,更新后需要禁用自动重启.发生了以下报错 2. 解决方法 2.1 下载pstools 工具下载地址 https://learn.microsoft.com/zh-cn/sysinternals/downloads/pstools 将软件复制到桌…

理解MTU VLAN与端口VLAN两个概念

什么是MTU VLAN MTU VLAN 是指将最大传输单元(Maximum Transmission Unit,MTU)设置为特定值以适应 VLAN 环境的配置。 MTU 是指在网络通信中可以传输的最大数据包大小。以太网的常见 MTU 值为1500字节,这是指在以太网帧中的数据…

【hudi】数据湖客户端运维工具Hudi-Cli实战

数据湖客户端运维工具Hudi-Cli实战 help hudi:student_mysql_cdc_hudi_fl->help AVAILABLE COMMANDSArchived Commits Commandtrigger archival: trigger archivalshow archived commits: Read commits from archived files and show detailsshow archived commit stats: …

<硬件设计>运放+三极管组成的恒流源VI电路设计与分析

目录 01 原理介绍&描述 运放的虚短和虚断 02 恒流源描述&分析 简单恒流源电路 简单恒流源电路描述 恒流源电路分析 恒流源VI电路 恒流源VI电路描述 恒流源VI电路分析 恒流源应用场景 03 恒流源VI电路示例 示例原理图&描述 恒流原理分析 恒流原理 恒…

毕业设计|基于51单片机的空气质量检测PM2.5粉尘检测温度设计

基于51单片机的空气质量检测PM2.5粉尘检测温度设计 1、项目简介1.1 系统构成1.2 系统功能 2、部分电路设计2.1 LED信号指示灯电路设计2.2 LCD1602显示电路2.3 PM2.5粉尘检测电路设计 3、部分代码展示3.1 串口初始化3.1 定时器初始化3.2 LCD1602显示函数 4 演示视频及代码资料获…

Java实现截取视频第一帧

目录 前言 一、通过Java借助第三方库实现 1.引用ffmpeg 使用maven,导入pom依赖: 工具类 2.引用jcodec 二、使用第三方存储自带的方法实现(如阿里云OSS、华为云OBS) 前言 在实际项目中,会遇到上传视频后&#xf…

SpringBoot轻松实现项目集成Knife4j接口文档

Knife4j 介绍 Knife4j 官网 Knife4j是一款基于Swagger生成API文档的增强工具,它简化了开发者构建和管理RESTful API文档的过程。通过自动扫描项目中的接口信息,Knife4j能够生成详细、易读的API文档,无需手动编写和维护。它提供交互式的接口调…

以太网传输距离以及延长办法

以太网传输距离与介质 以太网的标准传输距离取决于不同的以太网类型和传输介质。以下是一些常见的以太网类型和它们的标准传输距离: 以太网(Ethernet):传输距离最长为100米,使用双绞线作为传输介质。 快速以太网&…

我的Qt作品(19)使用Qt写一个轻量级的视觉框架---第2章,实现思维导图方式的流程图运行

上次写的第1章介绍了主界面的设计。 https://blog.csdn.net/libaineu2004/article/details/130277151 本次是第2章,主要介绍流程图的运行。 本作品采用的是QtOpenCV组合方式开发。流程图的设计思想其实就是数据结构的【图】。通过遍历每个节点来执行各个算法。 1…

深度学习数据集的文本制作和读取

文章目录 制作数据集的文本文件读取文本文件 制作数据集的文本文件 import os from os.path import join import random import config args config.argsclass SplitDataset:def __init__(self):self.data_root_path args.data_root_pathself.dataset_split_rate args.data…

【网络应用与安全】第一次作业

文章目录 一、熟悉实验室运行环境1 - 登录2 - 熟悉Linux环境3 - 远程登录4 - 使用Git 二、网络延迟三、网络应用四、HTTP五、Network Port六、TCP Protocol七、实验室系统1 - LDAP2 - Kerberos3 - Ansible 八、Linux运行环境和Nginx1 - 安装Ubuntu22.04.3LTS版本2 - 安装Nginx3…

Linux:基础开发工具之yum,vim,gcc的使用

文章目录 yumvimgcc 本篇主要总结的是Linux下开发工具 yumvimgcc/g yum 什么是yum? 不管是在手机移动端还是pc端,不管是什么操作系统,当用户想要下载一些内容或者工具的时候,都需要到一个特定的位置进行下载,例如在…