Hive-架构与设计

架构与设计

  • 一、背景和起源
  • 二、框架概述
    • 1.设计特点
  • 三、架构图
    • 1.UI交互层
    • 2.Driver驱动层
    • 3.Compiler
    • 4.Metastore
    • 5.Execution Engine
  • 四、执行流程
    • 1.发起请求
    • 2.获取执行计划
    • 3.获取元数据
    • 4.返回元数据
    • 5.返回执行计划
    • 6.运行执行计划
    • 7.运行结果获取
  • 五、数据模型
    • 1.DataBase数据库
    • 2.Table表
      • 2.1 MANGED_TABLE 内部表
      • 2.2 EXTERNAL_TABLE 外部表
      • 2.3 INDEX_TABLE 索引表
      • 2.4 VIRTUAL_VIEW 视图表
    • 3.Partition分区
      • 3.1 静态分区
      • 3.2 动态分区
    • 4.Bucket桶
  • 总结
  • 参考链接


一、背景和起源

大数据存储和处理框架Hadoop提供了对数据的存储、分析、任务调度的处理。其中的MapReduce可以对数据进行处理和分析的,但是MapReduce的编程比较繁琐并且修改不方便,对于一些单次处理和交互式分析非常不便。为了支持对数据仓库中数据的分析、简化用户使用数仓门槛,基于Hadoop的一套数据仓库分析系统Hive应运而生。Hive将结构化数据文件映射为一张数据库表,提供了丰富的SQL查询方式分析存储在Hadoop分布式文件系统的数据。将查询SQL语句转化成MapReduce任务进行执行。

二、框架概述

1.设计特点

支持通过SQL对数据仓库中数据进行访问,比如提取、转化、加工、分析等
支持将不同数据格式添加数据结构
可以直接访问大数据存储系统中的文件,比如HDFS、HBase等

三、架构图

在这里插入图片描述
Hive是构建在Hadoop之上,会将SQL转化成MapReduce任务在Hadoop集群进行执行,然后将结果保存在HDFS上,整体架构如上。

1.UI交互层

用户提交查询和其他操作

2.Driver驱动层

接受用户sql语句
调用编译器对Sql语句进行编译
调用执行引擎进行任务的执行

3.Compiler

基于Metastore中元数据对语句进行语义分析和解析查询生成执行计划

4.Metastore

存储数仓中表和分区的元数据,包括列信息、列类型信息、序列化器和反序列化器、存储文件等。

5.Execution Engine

hive生成的执行计划是一个由Stages组成的逻辑DAG图,执行引擎主要是将逻辑DAG图在Hadoop上进行调度和执行,最后转化成MapReduce的map task或reduce task进行运算。

四、执行流程

在这里插入图片描述

1.发起请求

UI交互层发起执行请求到Driver驱动层

2.获取执行计划

Driver驱动层将用户请求发送到编译器获取执行计划

3.获取元数据

编译器将sql语句中相关表和分区信息发送到MetaStore获取相关元数据

4.返回元数据

MetaStore返回对应元数据

5.返回执行计划

根据表和分区的元数据对sql的解析和优化,生成逻辑执行计划。该计划是一个DAG图,每个stage对应一个MapReduce的map或者reduce操作。

6.运行执行计划

将执行计划发送到Execution Engine,执行引擎会将逻辑执行计划提交到Hadoop中以MapReduce形式进行执行。

7.运行结果获取

UI交互层获取运行结果。

五、数据模型

hive主要将数据以以下几种数据模型进行组织,分别是DataBase、Table、Partition和Bucket。

1.DataBase数据库

相当于关系型数据中的命名空间,将数据库中数据隔离到不同的数据库模型中。

2.Table表

表是由描述表的元数据和存储的数据组成。数据存储在分布式文件系统中,元数据存储在关系型数据库中。表对应分布式文件系统的一个目录。Hive表分为以下四种:

2.1 MANGED_TABLE 内部表

内部表数据是由hive进行存储和管理的,默认存储位置为/user/hive/warehouse目录。

2.2 EXTERNAL_TABLE 外部表

外部表数据不会存储到hive相关目录下。当删除外部表时,hive只删除表的元数据,不会删除表数据。

2.3 INDEX_TABLE 索引表

索引表是为了提高表某些列的查询速度,包含指定列的值、对应的HDFS文件路径、偏移量的一张表。当查询时可以利用此索引表提高查询速度,避免全表扫描。

2.4 VIRTUAL_VIEW 视图表

视图是一组数据的逻辑表示,是sql语句的结果集

3.Partition分区

分区是根据表的某列值划分为不同分区,分区对应分布式系统中表目录下的一个子目录。分区基于分区键把具有相同分区键值的数据存储在一个子目录下。分区有两种类型:

3.1 静态分区

静态分区的分区数量和分区值都是固定的,新增分区和加载数据到分区时,需要提前指定分区名。

3.2 动态分区

动态分区的分区数量和分区值都是不确定的,会根据数据值自动创建新的分区。

4.Bucket桶

hive还支持将表或者分区中数据更细粒度的划分为桶,每个桶的数据对应分布式系统中子目录下的一个文件。

分桶表创建命令:

CREATE TABLE table_namePARTITIONED BY (partition1 data_type, partition2 data_type,.) CLUSTERED BY (column_name1, column_name2,) SORTED BY (column_name [ASC|DESC],)] INTO num_buckets BUCKETS;

总结

Hive是一个基于Hadoop的数仓分析工具,将分布式系统中的数据映射成结构化数据。提供丰富的SQL查询方式对数仓中的数据进行访问。一般不会存储数据、只会保存元数据到Hive中。Hive根据元数据信息将查询语句转化成执行计划,此执行计划由stage组成的DAG图,调用Hadoop中的MapReduce运行执行计划得到对应结果。


参考链接

1.Apache Hive
2.Hive Home
3.Hive Architecture

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

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

相关文章

Elasticsearch 通信模块的分析

Elasticsearch 通信模块的分析 - 知乎 Elasticsearch是一个基于Lucene的分布式实时搜索框架,它本身能够接受用户发来的http 请求, 集群节点之间也会有相关的通信。 通信模块的简介 Elasticsearch 中的通信相关的配置都是由NetworkModule 这个类完成的…

【深度学习】:实验6布置,图像自然语言描述生成(让计算机“看图说话”)

清华大学驭风计划 因为篇幅原因实验答案分开上传,深度学习专栏持续更新中,期待的小伙伴敬请关注 实验答案链接http://t.csdnimg.cn/bA48U 有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~ 案例 6 :图像自…

【RabbitMQ(二)】:Exchange 详解 | Message Convert 消息转换器

文章目录 03. 使用 Java 代码去操控 RabbitMQ3.1 快速入门3.1.1 创建父子项目3.1.2 编写代码 3.2 Work 模型3.3 RabbitMQ 中的三类交换机3.3.1 Fanout 扇出交换机3.3.2 Direct 交换机3.3.3 Topic 交换机 3.4 声明队列交换机3.4.1 方式一:书写 Config 类3.4.2 方式二…

如何将 Hexo 部署到 GitHub Pages

引言 在数字时代,拥有个人博客是展示自己想法、分享知识和技能的绝佳方式。Hexo 是一个基于 Node.js 的静态博客生成器,它结合了简洁性和功能性,让我们可以轻松地建立并维护一个博客。而 GitHub Pages 提供了一个免费的平台来托管这些静态网站…

推荐几个Python爬虫接单渠道

前言 平时工作有闲的家人们,今天给大家推荐一些用Python爬虫做私活的渠道! 【Python爬虫学习资料】 先给各位还不熟悉Python爬虫的朋友介绍一下! 可以短时间获得大量资料~ 可以进一步数据分析 当然也可以获得收益! 学会Python…

物资捐赠管理系统

文章目录 物资捐赠管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目(9.9¥带走) 物资捐赠管理系统 一、项目演示 爱心捐赠系统 二、项目介绍 基于springboot的爱心捐赠管理系统 开发语言&#xff1a…

Spring基础 - SpringMVC请求流程和案例

Spring基础 - SpringMVC请求流程和案例 什么是MVC 用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理…

MYSQL学习笔记:mysql运算符

MYSQL学习笔记:mysql运算符 select * from user where score in (99,100); select * from user where name like zhang%;通配符放到后面或者中间是可以利用索引的,但是通配符放到开头没法用到索引

社区店营销新趋势:如何吸引并留住顾客?

作为一名资深的鲜奶吧创业者,我已经在这个行业摸爬滚打了五年。 这五年的时间,我见证了社区店营销的变迁,也积累了一些关于如何吸引并留住顾客的经验。今天,我想和大家分享一些留住顾客的核心干货。(可以点赞收藏&…

统一数据格式返回,统一异常处理

目录 1.统一数据格式返回 2.统一异常处理 3.接口返回String类型问题 1.统一数据格式返回 添加ControllerAdvice注解实现ResponseBodyAdvice接口重写supports方法,beforeBodyWrite方法 /*** 统一数据格式返回的保底类 对于一些非对象的数据的再统一 即非对象的封…

Idea Git Review插件

idea git plugin 添加了一些常用的小插件 可以右键打开git bash窗口 可以右键选中文字点击baidu fanyi 可以通过搜索git用户名 指定开始时间查询某个版本自己提交的所有代码文件 可以通过点击蓝色行数,跳转到指定的改动代码块 资源地址: git-pl…

Python贝尔多项式

文章目录 Bell数和Bell多项式第二类Bell多项式 Bell数和Bell多项式 Bell,即所有包含 n n n个对象的有限集合的子集数之和,可通过递推式进行定义 B n ∑ k 0 n − 1 ( n − 1 k ) B k , B 0 1 B_n\sum^{n-1}_{k0}\begin{pmatrix} n-1\\k \end{pmatrix…

《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(11)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(10) 4.2 PCIe体系结构的组成部件 PCIe总线作为处理器系统的局部总线,其作用与PCI总线类似,主要目的是为了连接处理器系统中的外部设备…

Python 小白的 Leetcode Daily Challenge 刷题计划 - 20240209(除夕)

368. Largest Divisible Subset 难度:Medium 动态规划 方案还原 Yesterdays Daily Challenge can be reduced to the problem of shortest path in an unweighted graph while todays daily challenge can be reduced to the problem of longest path in an unwe…

你了解内联函数吗?

内联函数 概念 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数能提升程序运行的效率。对比于传统的函数调用,内联函数更像宏。告诉编译器在调用函数时将函数的代…

C++初阶:适合新手的手撕vector(模拟实现vector)

上次讲了常用的接口:C初阶:容器(Containers)vector常用接口详解 今天就来进行模拟实现啦 文章目录 1.基本结构与文件规划2.空参构造函数(constructor)4.基本函数(size(),capacity(),resize(),reserve())4.增…

软件文档测试

1 文档测试的范围 软件产品由可运行的程序、数据和文档组成。文档是软件的一个重要组成部分。 在软件的整人生命周期中,会用到许多文档,在各个阶段中以文档作为前阶段工作成果的体现和后阶段工作的依据。 软件文档的分类结构图如下图所示: …

fast.ai 深度学习笔记(七)

深度学习 2:第 2 部分第 14 课 原文:medium.com/hiromi_suenaga/deep-learning-2-part-2-lesson-14-e0d23c7a0add 译者:飞龙 协议:CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它,…

InternLM大模型实战-1.书生浦语大模型全链路开源体系

文章目录 前言笔记正文大模型成为热门关键词书生浦语开源历程从模型到应用书生浦语全链条开源开放体系数据预训练微调评测部署部署智能体LagentAgentLego 总结 前言 本系列文章是参与书生浦语全链路开源体系学习的笔记文章。B站视频教程地址: 笔记正文 大模型成为…

【算法训练营】数字盒子,重编码,成绩排序(python实现)

数字盒子 问题描述 你有一个盒子,你可以往里面放数,也可以从里面取出数。 初始时,盒子是空的,你会依次做 Q 个操作,操作分为两类: 插入操作:询问盒子中是否存在数 x,如果不存在则把数…