【大数据之Hive】一、Hive概念及框架原理

news2025/1/11 14:58:17

1 Hive概念

  Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能,主要完成海量数据的分析和计算。

优点:简化数据开发流程及提高了效率。

2 Hive本质

  Hive是一个Hadoop客户端,用于将HQL(Hive SQL)转化成MapReduce程序。
(1)Hive中每张表的数据存储在HDFS;
(2)Hive分析数据底层的实现是MapReduce(也可配置为Spark或者Tez) ;
(3)执行程序运行在Yarn上。

3 Hive框架原理

在这里插入图片描述
组件:
(1)用户接口:Client

  Hive给客户提供了命令行客户端CLI语句(command-line interface)(CLI只能在安装了Hive的本地使用,用户进行建表等)、JDBC/ODBC

  JDBC和ODBC的区别:

  1)JDBC的移植性比ODBC好;(通常情况下,安装完ODBC驱动程序之后,还需要经过确定的配置才能够应用。而不相同的配置在不相同数据库服务器之间不能够通用。所以,安装一次就需要再配置一次。JDBC只需要选取适当的JDBC数据库驱动程序,就不需要额外的配置。在安装过程中,JDBC数据库驱动程序会自己完成有关的配置。)

  2)两者使用的语言不同,JDBC在Java编程时使用,ODBC一般在C/C++编程时使用。

(2)元数据:Metastore
  Metastore只提供元数据的访问接口,不负责存储数据(元数据通常保存在关系型数据库中),表到路径的映射关系保存在元数据中。

  元数据包括:用户创建的数据库(默认是default)、表名、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。

(3)HiveServer2
  提供JDBC或ODBC的访问接口和用户认证的相关功能。

(4)驱动器:Driver

  当用户使用的是命令行客户端CLI时Driver就运行在客户端中,若使用的是JDBC/ODBC客户端Driver就运行在HiveServer2中;

  Driver负责编译和提交任务(将一条Hive的SQL语句即HQL编译成MapReduce的计算程序)。

  具体工作:
  1)解析器(SQLParser):包含词法分析(对用户输入的sql字符串进行逐个字符扫描,根据预置规则识别关键词并生成特殊符号,每个符号成为一个token)和语法分析(对词法分析中输出的token进行分析,将token组合成短句,再将短句组合成一个完整的树状语法结构),将SQL字符串转换成抽象语法树(AST)

  2)语义分析(Semantic Analyzer)将AST进一步划分为QeuryBlock(先遍历解析器输出的抽象语法树,将AST中token划分成一个个的查询单元QeuryBlock(可以理解为子查询),并获取元数据信息(原表路径和目标表的路径)赋予查询单元QeuryBlock);

  3)逻辑计划生成器(Logical Plan Gen):将语法树生成逻辑计划;

  4)逻辑优化器(Logical Optimizer):对逻辑计划进行优化;

  5)物理计划生成器(Physical Plan Gen):根据优化后的逻辑计划生成物理执行计划(如生成的MapReduce等);

  6)物理优化器(Physical Optimizer):对物理执行计划进行优化(如使用map join优化);

  7)执行器(Execution):执行该计划,得到查询结果并返回给客户端。

(5)Hadoop
  使用HDFS进行存储,可以选择MapReduce/Tez/Spark进行计算。

Hive组件间配合工作原理

  Hive给客户提供了命令行客户端CLI语句(command-line interface)(CLI只能在安装了Hive的本地使用,)、JDBC/ODBC,用户进行建表等;

  Metastore把创建的表的元数据信息保存到数据库中,如果用户在建表时指定了表的hdfs路径,且该hdfs路径下已经有文件,此时Hive表与hdfs文件的内容形成了映射关系;

  当用户执行了查询语句,编译和提交任务(将一条Hive的SQL语句即HQL编译成MapReduce的计算程序)的工作由Driver完成,Driver在编译HQL的过程中需要用到元数据信息(因为给Hive提供的是对表的操作,最终编译的MR程序需要输入路径,而表到路径的映射关系保存在元数据中);

  当Driver已经完成了编译任务(即得到可执行的MR程序),此时Driver会把任务提交到Yarn上运行;

  当MR启动之后会读取原表数据,执行后将计算结果写到目标表的路径或者写到临时目录中;若执行的是查询语句,则查询结果也会被拉取到Hive的客户端。

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

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

相关文章

【golang】2、http client、爬图

文章目录 一、http client爬取并存储 jpg 用 golang 可以很方便的爬图(http 下载图片,存储为 jpg 格式)。 一、http client http client 有如下最佳实践: 尽量用 default http client:默认的 http client 设置了很多…

排序算法——堆排序

把上面的序列变成一个完全二叉树,要想实现大顶堆(大顶堆:叶子节点不考虑,每个节点都要比他的两个孩子节点要大),就要进行如下操作,你会发现len/2就是最后一个非叶子节点 第一步是从下往上调 9和…

Apache Pulsar部署搭建

1.部署规划 部署 Pulsar 集群包括以下步骤(按顺序): 1.部署一个 ZooKeeper 集群,初始化 Pulsar 集群元数据。2.部署一个 Bookeeper 集群。3.部署一个或多个 Pulsar brokers。4.部署 Pulsar manager(可选)。 2.节点规划 主机名…

【C++】函数重载 - 给代码增添多彩的魔法

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、函数重载概述 3、函数重载注意事项 4、总结 1、缘起 函数重载,是编程世界中的一抹迷人色彩&#xff0c…

IMX6ULL平台I2C数据结构分析

IMX6ULL平台I2C数据结构分析 文章目录 IMX6ULL平台I2C数据结构分析i2c_clienti2c_adapterimx_i2c_structimx_i2c_hwdataimx_i2c_dma 在 i.MX 平台的 I2C 驱动中,存在多个相关的结构体,它们之间的联系和在内核中的作用如下: struct i2c_client…

CentOS 7 上安装 Anaconda

一、在 CentOS 7 上安装 Anaconda 的步骤如下: 在官网下载 Anaconda 的最新版本,链接:https://www.anaconda.com/products/distribution 打开终端,进入下载目录,使用以下命令来安装 Anaconda:# 也可直接在…

【JavaScript】线程和进程,JavaScript线程,事件队列,事件循环 ,微任务、宏任务

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 进程和线程JavaScript线程事件队列、事件循环微任务、宏任务面试题1面试题2 进程和线程 进程&a…

有符号定点小数的31bit问题

背景 定点小数就是小数位恒定的小数,在信号处理等领域应用广泛,它的表示格式类似于S1.7(有符号,整数部分1bit,小数部分7bit)、U0.8(无符号,没有整数部分,小数部分8bit&a…

基于java的班级综合测评管理系统的设计与实现

背景 本系统的主要目的在于加速信息化进程,充分利用计算机技术和现代通讯的手段面向学校的服务。建立信息交流平台,方便信息资源的共享,加强各个部门之间的交流。提高整体的办公效率,为管理员以及教师提供辅助的班级综合测评管理…

Java如何远程调试线上项目

远程调试java项目 [Remote Debug JVM] 一、前提二、配置IntelliJ IDEA2.1、打开 IntelliJ IDEA 并打开您的 Java 项目2.2、单击 "Run" 菜单,然后选择 "Edit Configurations..."2.3、在 "Run/Debug Configurations" 对话框中&#xff…

c++ ffmpeg 开发之配置文件(1)

第一 目录结构 D:\work\c\ffmpeg //项目根目录 D:\work\c\ffmpeg\depend //ffmpeg ffmpeg c开发包点击下载 D:\work\c\ffmpeg\include D:\work\c\ffmpeg\depend\lib D:\work\c\ffmpeg\source //源码根目录 第二:测试源码,名字自己随意起…

AntDB数据库参加开源数据库技术沙龙,分享全栈业务能力

5月12日,由PostgreSQL中文社区和PolarDB开源数据库举办的开源数据库技术沙龙温州站于温州大学举办。此次活动邀请了众多数据库领域的专家和技术大咖,旨在促进数据库与温州产业界和学术界的交融发展与合作,共同探讨数据库产业未来的发展趋势&a…

Java高并发核心编程—CAS与JUC原子类

注:本笔记是阅读《Java高并发核心编程卷2》整理的笔记! CAS原理 JUC原子类一Atomic 基本原子类 数组原子类 引用原子类 字段更新原子类 AtomicInteger 线程安全原理 引用类型原子类 属性更新原子类 ABA问题 提升高并发场景下CAS提作的性能 以空间换时间:…

idea 调试远程docker中的spring boot 项目

开发环境 idea-2023(放心,旧版本也可以远程调试) Java版本:17 生产环境 docker版本:23.0.3 Java版本1:openjdk:17.0.2(基于Java17的项目) Java版本2:adoptopenjdk:…

开源网安亮相粤港澳大湾区CIO高峰论坛,保障企业数字化安全转型

近日,由深圳市工业化与信息化局、深圳市科学技术协会指导,深圳市CIO协会主办的“2023中国(深圳)数字化转型大会暨粤港澳大湾区CIO高峰论坛”圆满完成。开源网安作为拥有软件安全领域全链条产品的厂商,携多年来打造的国产化软件安全替代方案&a…

EMC模式如何助力新能源服务商攻坚克难

01. 什么是合同能源管理? 合同能源管理(EMC-Energy Management Contract)是一种新型的市场化节能机制,其实质就是以减少的能源费用来支付节能项目全部成本的节能投资方式。:节能服务公司与用能单位以契约形式约定节能项目的节能目标,节能服务…

【Python脚本】视频稳像(Video Stabilization)

#【Python脚本】视频稳像(Video Stabilization) 参考:博客1 参考: 原文:https://blog.csdn.net/hjl240/article/details/52683738 开源:关键词 Video Stabilization 不错: https://github.com/yaochih/awesome-vide…

秒杀系统常见问题—如何避免库存超卖?

大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 以下是正文! 先看问题 首先上一串代码 …

Linux SUID提权脏牛提权

SUID提权 suid就是set user id 。设置了SUID后,文件启动的时候就会以root的权限去运行。就是一个普通用户运行的时候,因为有SUID,所以用root权限去运行它。 加SUID权限chmod ux 这里开始复现。 上传Linux提权信息检测脚本LinEnum find …

堆及其实现

目录 一:堆的概念及结构 1.概念 2.堆的性质 二:堆的实现 1.堆的构建 2.堆的销毁 3.数据的交换 4.堆的插入 5.堆的判空 6.堆的删除 7.取堆顶的数据 8.堆的数据个数 9.示例 三:完整的代码 一&#xff…