Hive入门学习

news2024/11/25 12:38:19

文章目录

  • 1.概述
      • 1.1 hive与hadoop的关系
      • 1.2 映射信息记录
      • 1.3 hive架构图
      • Hive组件
  • 2.Hive数据模型
      • 2.1 Table
      • 2.2 Partition
      • 2.3 Buckets
  • 3.元数据相关名词
      • 3.1 Metadata
      • 3.2 Metastore
      • 3.3 metastore三种配置方式
        • 3.3.1 内嵌模式
        • 3.3.2 本地模式
        • 3.3.3 远程模式

1.概述

Apach hive 是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop的hdfs系统中的结构化、半结构化文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称之为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。
Hive核心:将HQL转换为MapReduce程序,然后将程序提交到Hadoop集群执行,Hive是由Facebook实现并开源的。
在这里插入图片描述

1.1 hive与hadoop的关系

hive借助hadoop实现了数据仓库软件所具有的分析数据和存储数据的能力,hive利用hdfs来实现对数据的存储,利用mapreduce来实现对数据的分析和计算。
hive最大的魅力在于用户只需要根据业务逻辑去编写HQL,hive将用户编写的hql转换为MR程序来完成对数据的分析。

1.2 映射信息记录

在hive中能实现写sql处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚。映射信息专业的叫法叫做元数据信息(元数据:即用来描述数据的数据)。
hive将表中的数据存储在hdfs上,将表的元数据信息存储在RDBMS(关系型数据库,如MySQL)上。

1.3 hive架构图

在这里插入图片描述
用户在写完sql之后,hive需要对sql进行语法校验,并且会根据记录的元数据信息找到对应的文件,制定执行计划,并且将执行计划转换成MR程序调用执行引擎来执行,执行完成后,将结果返回给用户。

Hive组件

用户接口:包括CLI、JDBC/ODBC、WebGUI。
元数据存储:元数据通常存储在关系数据库:MySQL/derby中。
Driver驱动程序:包括语法解析器、计划编译器、优化器、执行器:完成HQL查询语句的词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并且随后有执行引擎调用执行。
执行引擎:Hive本身不直接处理数据文件,而是通过执行引擎处理,当下hive支持MR、Tez、Spark 3种执行引擎。

2.Hive数据模型

Hive中的数据可以在粒度级别上分为三类:
Table表
Partition分区
Bucket分桶
在这里插入图片描述

2.1 Table

Hive表与关系数据库中的表相同。Hive中的表所对应的数据是存储在Hadoop的文件系统中,而表相关的数据是存储在关系型数据库中

2.2 Partition

Partition分区是hive的一种优化手段表。分区是指根据分区列(如根据日期day属性的值将表划分为不同的分区)
分区在存储层面上的表现是:table表目录下以子文件夹形式存在。
一个文件夹表示一个分区。子文件命名标准:分区列=分区值
在这里插入图片描述

2.3 Buckets

Bucket分桶表是hive的一种优化手段表。分桶是指根据表中字段(如ID的值),经过hash计算规划将数据文件划分为指定的若干个小文件。
在这里插入图片描述
分桶规则:hashfunc(ID)%桶的个数,余数相同的分到同一个文件中。

在这里插入图片描述

3.元数据相关名词

3.1 Metadata

metadata即元数据,元数据包含用Hive创建的database、table、表的位置、类型、属性、字段顺序等元信息。

3.2 Metastore

Metastore即元数据服务。Metastore服务的作用是管理metadata,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来获取元数据。
有了metastore服务,各个客户端可以同时连接metastore,而这些客户端不需要知道mysql的用户名和密码,只需要连接metastore服务即可,某种程度上也保证了hive元数据的安全。

3.3 metastore三种配置方式

在这里插入图片描述

3.3.1 内嵌模式

内嵌模式(Embedded Metastore)是metastore默认部署模式。此种模式下,元数据存储在内置的Derby数据库,并且Derby数据库和metastore服务都嵌入在主HiveServer进程中,当启动HiveServer进程时,Derby和metastore都会启动。不需要额外起Metastore服务。
但是一次只能支持一个活动用户,适用于测试体验,不适用于生产环境。
在这里插入图片描述

3.3.2 本地模式

本地模式(Local Metastore)下,Hive Metastore服务与主HiveServer进程在同一进程中运行,但是存储元数据的数据库在单独的进程中运行,并且可以在单独的主机上。metastore服务将通过JDBC与metastore数据库进行通信。
本地模式采用外部数据库来存储元数据,推荐使用MySQL。
hive根据hive.metastore.uris 参数值来判断,如果为空,则为本地模式。
缺点是:每启动一次hive服务,都内置启动了一个metastore。
在这里插入图片描述

3.3.3 远程模式

远程模式(Remote Metastore)下,Metastore服务在其自己的单独JVM上运行,而不在HiveServer的JVM中运行。如果其他进程希望与Metastore服务器通信,则可以使用Thrift Network API进行通信。
在生产环境中,建议用远程模式来配置Hive Metastore。在这种情况下,其他依赖hive的软件都可以通过Metastore访问hive。由于还可以完全屏蔽数据库层,因此这也带来了更好的可管理性/安全性。
远程模式下,需要配置hive.metastore.uris 参数来指定metastore服务运行的机器ip和端口,并且需要单独手动启动metastore服务。

在这里插入图片描述

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

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

相关文章

并发编程-学习总结(上)

目录 1、线程基础 1.1、线程实现方法 1.2、如何正确停止线程 1.3、Java线程的六种状态 1.4、wait/notify/notifyAll注意事项 1.4.1、为什么 wait 、notify、notifyAll必须在 synchronized 保护的同步代码中使用? 1.4.2、为什么 wait/notify/notifyAll 被定义…

浅谈QWebChannel、QWebChannelAbstractTransport、QWebSocketServer、QWebSocket用法及之间关系

1.前言在现实业务中,经常遇到这样的需求:一端采用web形式开发的,如:客户端采用html、javascript、nodejs开发;而另一端采用C开发,如:Qt开发的服务端。web页面端需和Qt开发的服务端进行通信、数据…

深入理解java虚拟机精华总结:如何判断对象是否可回收、引用、finalize、方法区回收、垃圾收集算法、垃圾收集器、内存分配与回收策略

深入理解java虚拟机精华总结:如何判断对象是否可回收、引用、finalize、方法区回收、垃圾收集算法、垃圾收集器、内存分配与回收策略如何判断对象是否可回收引用计数可达性分析法引用finalize方法区回收垃圾收集算法标记-清除算法标记-复制算法标记-整理算法垃圾收集…

141周期acwing(kmp)

一个字符串的前缀是从第一个字符开始的连续若干个字符,例如 abaab 共有 5 个前缀,分别是 a,ab,aba,abaa,abaab。 我们希望知道一个 N 位字符串 S 的前缀是否具有循环节。 换言之,对于每一个从…

_vue-1

谈谈你对MVVM的理解 为什么要有这些模式,目的:职责划分、分层(将Model层、View层进行分类)借鉴后端思想,对于前端而已,就是如何将数据同步到页面上 MVC模式 代表:Backbone underscore jquer…

Docker buildx 的跨平台编译

docker buildx 默认的 docker build 命令无法完成跨平台构建任务,我们需要为 docker 命令行安装 buildx 插件扩展其功能。buildx 能够使用由 Moby BuildKit 提供的构建镜像额外特性,它能够创建多个 builder 实例,在多个节点并行地执行构建任…

YOLOv5模型学习记录

新年伊始,YOLOv8横空出世,这个还未开源时便引发界内广泛热议的目标检测算法,一经问世便再次引发热潮,而作为与其师出同源的YOLOv5,自然要拿来与其比较一番。接下来我们便来学习一下吧。 模型结构 首先便是模型结构了…

Lambda原理及应用

Lambda原理及应用 Lambda介绍 Lambda 是 JDK8 以后版本推出的一个新特性,也是一个重要的版本更新,利用 Lambda 可以简化内部类,可以更方便的进行集合的运算,让你的代码看起来更加简洁,也能提升代码的运行效率。 Lambda语法 非…

优先级队列(堆)  堆排序

前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,该中场景下,使用队列显然不合适,比如&a…

【数据库】MySQL

时间戳 可以在创建表的时候,创建时间戳 mysql数据库怎么加入时间戳_帅气的黑桃J的博客-CSDN博客_mysql 插入时间戳 数据库表的命名规范 数据库表字段命名规范 - 腾讯云开发者社区-腾讯云 (tencent.com) MySql 的大小写问题 以下是MySQL详细的大小写区分规则&am…

《爆肝整理》保姆级系列教程python接口自动化(二十三)--unittest断言——上(详解)

简介 在测试用例中,执行完测试用例后,最后一步是判断测试结果是 pass 还是 fail,自动化测试脚本里面一般把这种生成测试结果的方法称为断言(assert)。用 unittest 组件测试用例的时候,断言的方法还是很多的…

Spring系列-9 Async注解使用与原理

背景: 本文作为Spring系列的第九篇,介绍Async注解的使用、注意事项和实现原理,原理部分会结合Spring框架代码进行。 本文可以和Spring系列-8 AOP原理进行比较阅读 1.使用方式 Async一般注解在方法上,用于实现方法的异步&#xf…

无源晶振匹配电容—计算方法

以前有写过一篇文章“晶振”简单介绍了晶振的一些简单参数,今天我们来说下无源晶振的匹配电容计算方法: 如上图,是常见的的无源晶振常见接法,而今天来说到就是这种常见电路的电容计算方法,有两种: A&#…

CUDA 内存系统

CUDA 内存系统 本文主要是针对<cuda c编程权威指南>的总结,由于原书出版的时候cuda刚刚出到cuda6,之后的cuda版本可能有更新,可能需要我翻一翻文档,待更新. 内存系统架构图 常见的内存作用域与生存期 新特性 早期的 Kepler 架构中一个颇为好用的特性就是 CUDA 程序员可…

没有公网ip怎么外网访问nas?快解析内网端口映射到公网

对于NAS用户而言&#xff0c;外网访问是永远绕不开的话题。拥有NAS后的第一个问题&#xff0c;就是搞定NAS的外网访问。不过众所周知&#xff0c;并不是所有的小伙伴都能得到公网IP&#xff0c;由于IPV4资源的枯竭&#xff0c;一般不会被分配到公网IP。公网IP在很大程度上除了让…

文件的打开关闭和顺序读写

目录 一、文件的打开与关闭 &#xff08;一&#xff09;文件指针 &#xff08;二&#xff09; 文件的打开和关闭 二、文件的顺序读写 &#xff08;一&#xff09;fputc 1. 介绍 2. 举例 &#xff08;二&#xff09;fgetc 1. 介绍 2. 举例1 3. 举例2 &#xff08;三&…

长尾关键词使用方法,通过什么方式挖掘长尾关键词?

当你在搜索引擎的搜索栏中输入有关如何使用长尾关键词的查询时&#xff0c;你可能希望有简单快捷的方式出现在搜索结果中&#xff0c;可以帮助你更好地应用seo。 不过&#xff0c;这里要记住一件事&#xff1a;SEO 策略只会为你的网站带来流量&#xff1b;在你的产品良好之前&a…

VS编译系统 实用调试技巧

目录什么是bug?调试是什么&#xff1f;有多重要&#xff1f;debug和release的介绍windows环境调试介绍、一些调试实例如何写出&#xff08;易于调试&#xff09;的代码编程常见的错误什么是bug?其实bug在英文翻译中有表示臭虫的含义&#xff0c;因为第一次被发现的导致计算机…

【Linux驱动开发100问】什么是模块?如何编写和使用模块?

&#x1f947;今日学习目标&#xff1a;什么是Linux内核&#xff1f; &#x1f935;‍♂️ 创作者&#xff1a;JamesBin ⏰预计时间&#xff1a;10分钟 &#x1f389;个人主页&#xff1a;嵌入式悦翔园个人主页 &#x1f341;专栏介绍&#xff1a;Linux驱动开发100问 什么是模块…

堆的基本存储

一、概念及其介绍堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。堆满足下列性质&#xff1a;堆中某个节点的值总是不大于或不小于其父节点的值。堆总是一棵完全二叉树。二、适用说明堆是利用完全二叉树的结构来维护一组数…