Hive-架构与设计

news2024/11/17 14:27:28

架构与设计

  • 一、背景和起源
  • 二、框架概述
    • 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_name

PARTITIONED 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://www.coloradmin.cn/o/1443560.html

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

相关文章

【后端高频面试题--Mybatis篇】

🚀 作者 :“码上有前” 🚀 文章简介 :后端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 后端高频面试题--Mybatis篇 什么是Mybatis?Mybatis的优缺点?Mybatis的特点…

例36:打开文件读出文件内容

1.建立一个EXE工程,在主窗体上放一个按钮,如图32。 图32 在按钮的单击事件中输入代码: Sub Form1_Command1_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd)Dim s as StringDim 文件 As CWSTR FF_OpenFileDialog(hWndForm,_"打开…

【JAVA WEB】 百度热榜实现 新闻页面 Chrome 调试工具

目录 百度热榜 新闻页面 Chrome 调试工具 --查看css属性 打开调试工具的方式 标签页含义 百度热榜 实现效果&#xff1a; 实现代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"vi…

React18原理: Fiber架构下的单线程CPU调度策略

概述 React 的 Fiber 架构, 它的整个设计思想就是去参考CPU的调度策略CPU现在都是多核多进程的&#xff0c;重点研究的是 CPU是单核单线程&#xff0c;它是如何调度的?为什么要去研究单线程的CPU&#xff1f; 浏览器中的JS它是单线程的JS 的执行线程和浏览器的渲染GUI 是互斥…

【从Python基础到深度学习】4. Linux 常用命令

1.配置root用户密码 root用户为系统默认最高权限用户&#xff0c;其他用户密码修改命令与root用户修改密码命令相同 sudo passwd root 2.添加用户&#xff08;henry&#xff09; sudo useradd -m henry -s /bin/bash 3.配置henry用户密码 Xshell下连接新用户&#xff08;hen…

Idea Git Review插件

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

专业课135+总分400+西安交通大学815/909信号与系统考研电子信息与通信工程,真题,大纲,参考书。

经过将近一年的考研复习&#xff0c;终于梦圆西安交大&#xff0c;今年专业可815(和909差不多)信号与系统135&#xff0c;总分400&#xff0c;回想这一年的复习还是有很多经验和大家分享&#xff0c;希望可以对大家复习有所帮助&#xff0c;少走弯路。 专业课&#xff1a; 这…

2 月 9 日算法练习- 数据结构 - 除夕快乐♪٩(´ω`)و♪

翻转括号序列 暴力过20%数据 思路&#xff1a;括号合法序列问题可以利用前缀和&#xff0c;将"(“看成 1&#xff0c;”)"看成 0&#xff0c;规律是到某个位置为止的前缀和>0并且到最后前缀和0。 #include<bits/stdc.h> using namespace std; const int N…

【Spring MVC】Spring MVC的执行流程与源码分析

目录 一、Spring MVC的组件详解 1.1 处理器映射器 1.1.1 处理器映射器的继承体系 1.2 处理器适配器和处理器 1.2.1 处理器适配器的继承体系 1.2.2 处理器适配器和处理器的对应关系 第一个适配器&#xff1a;org.springframework.web.servlet.mvc.method.annotation.Reque…

【计算机网络】协议层次及其服务模型

协议栈&#xff08;protocol stack&#xff09; 物理层链路层网络层运输层应用层我们自顶向下&#xff0c;所以从应用层开始探究应用层 协议 HTTP 提供了WEB文档的请求和传送SMTP 提供电子邮件报文的传输FTP 提供两个端系统之间的文件传输报文&#xff08;message&#xff09;是…

计算机网络——05Internet结构和ISP

Internet结构和ISP 互连网络结构&#xff1a;网络的网络 端系统通过接入ISPs连接到互连网 住宅、公司和大学的ISPs 接入ISPs相应的必须是互联的 因此任何2个端系统可相互发送分组到对方 导致的“网络的网络”非常复杂 发展和演化是通过经济的和国家的政策来驱动的 问题&…

re:从0开始的CSS学习之路 9. 盒子水平布局

0. 写在前面 过年也不能停止学习&#xff0c;一停下就难以为继&#xff0c;实属不应 1. 盒子的水平宽度 当一个盒子出现在另一个盒子的内容区时&#xff0c;该盒子的水平宽度“必须”等于父元素内容区的宽度 盒子水平宽度&#xff1a; margin-left border-left padding-lef…

fast.ai 机器学习笔记(三)

机器学习 1&#xff1a;第 8 课 原文&#xff1a;medium.com/hiromi_suenaga/machine-learning-1-lesson-8-fa1a87064a53 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这些笔记将继续更…

微软 CMU - Tag-LLM:将通用大语言模型改用于专业领域

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 论文地址&#xff1a;https://arxiv.org/abs/2402.05140 Github 地址&#xff1a;https://github.com/sjunhongshen/Tag-LLM 大语言模型&#xff08…

rediss集群 三主三从集群模式

三主三从集群模式 1)、新建redis集群目录&#xff1a;7001~7006工作目录【/app/soft/redis-cluster/目下】 2&#xff09;、在7001~7006 目录下创建bin和conf 目录&#xff0c;然后将/app/soft/redis/bin目录下的文件分别拷贝到7001~7006 目录&#xff0c;然后在7001~7006 目…

C++ 动态规划 数位统计DP 计数问题

给定两个整数 a 和 b &#xff0c;求 a 和 b 之间的所有数字中 0∼9 的出现次数。 例如&#xff0c;a1024&#xff0c;b1032 &#xff0c;则 a 和 b 之间共有 9 个数如下&#xff1a; 1024 1025 1026 1027 1028 1029 1030 1031 1032 其中 0 出现 10 次&#xff0c;1 出现 10…

「数据结构」二叉搜索树1:实现BST

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;Java数据结构 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 实现BST &#x1f349;二叉搜索树的性质&#x1f349;实现二叉搜索树&#x1f34c;插入&#x1f34c;查找&#x1f34c;删除 &am…

codeforces 1400分

文章目录 1.[B. Phoenix and Beauty](https://codeforces.com/problemset/problem/1348/B)2.[C. Rotation Matching](https://codeforces.com/problemset/problem/1365/C)3.[C. Element Extermination](https://codeforces.com/problemset/problem/1375/C)4.[D. Epic Transform…

Mysql Day04

mysql体系结构 连接层服务层引擎层&#xff08;索引&#xff09;存储层 存储引擎 存储引擎是基于表建立的&#xff0c;默认是innoDB show create table tb; 查看当前数据库支持的存储引擎 show engines; InnoDB 特点 DML&#xff08;数据增删改&#xff09;遵循ACID模…

【STM32 HAL库实战】串口DMA + 空闲中断 实现不定长数据接收

本文目录 1、STM32CubeMX配置部分1.1 SYS配置如图1.2 RCC配置如图1.3 USART1配置NVIC SettingsDMA Settings 1.4 DMA配置 2、软件执行流程2.1 HAL_UARTEx_ReceiveToIdle_DMA()2.2 HAL_UART_IRQHandler(&huart1)2.3 HAL_UARTEx_RxEventCallback()2.4 HAL_UART_ErrorCallback…