六、Hive数据仓库应用之Hive事务(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7)

news2024/12/28 9:37:45

Hive远程模式部署参考:
一、Hive数据仓库应用之Hive部署(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7)

文章目录

  • 一、事务的设计与特点
    • 1、事务的特点
    • 2、事务的设计
    • 3、事务的实现
  • 二、事务表的操作
    • 1、事务的开启
    • 2、事务表的创建
    • 3、数据的插入
    • 4、更新操作
    • 5、删除操作

一、事务的设计与特点

1、事务的特点

事务是由一系列数据库操作组成的一个完整逻辑过程。在hive中,事务包含四个特性:原子性、隔离性、一致性以及持久性。

原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
隔离性:数据库允许并发执行的各个事务之间互不干扰,一个事务内部的操作及使用的数据,对于并发的其他事务是隔离的。
一致性:在事务开始之前和事务结束以后,数据库保持一致性和正确性,满足数据完整性约束。
持久性:事务处理结束后,数据库中对应数据的状态变更是永久性的。

2、事务的设计

Hive的数据文件存放在HDFS中,是不支持对文件进行修改的,只允许追加数据。同时当数据追加到HDFS时,HDFS不具备对读取数据文件的用户提供一致性。因为Hive采用增量的形式去记录数据的更新与删除。
Hive事务表中的数据一般会被设计成两种类型的文件,一种是基础文件,用于存放Hive事务表中的原始数据;一种是增量文件,用于存储Hive事务表中新增、更新、删除的数据,以Hive桶的形式进行存储。
在实际使用过程中, 每一个事务处理的数据都会被单独创建一个增量文件夹用于存储数据,当用户读取事务表的数据时,会将基础文件和增量文件都读取到内存中进行合并,合并的过程会判断原始数据中哪些数据进行了修改或删除等操作,最终将合并后的结果返回给查询。

3、事务的实现

Hive通过HiveServer2或Metastore中运行的一组后台进程Compactor实现事务的支持。随着修改表的操作增加,增量文件的数量也会随之增加,这个时候就需要使用Compactor对增量文件进行压缩。压缩分为主要压缩和次要压缩,主要压缩处理一个或多个桶的增量文件和基本文件,将它们重写为每个桶新的基本文件;次要压缩会获取一组现有的增量文件,并将每个增量文件夹重写为单个增量文件。

二、事务表的操作

1、事务的开启

Hive在默认情况下并不会开启事务的支持,但是为了保证ACID原则的规范,Hive需要进行额外的处理,这将带来性能方便的影响,需要手动配置开启Hive事务。
以创建好的集群node-01、node-02、node-03为例,由于使用node-02的Hive客户端工具Beeline远程连接node-01中的HiveServer2服务的方式操作Hive,因此修改node-01的Hive配置文件hive-site.xml,在配置文件的中添加以下内容。

<property>
     <name>hive.support.concurrency</name>
  <value>true</value>
</property>
<property>
     <name>>hive.enforce.bucketing</name>
     <value>true</value>
</property>
<property>
     <name>hive.exec.dynamic.partition.mode</name>
     <value>nonstrict</value>
</property>
<property>
     <name>hive.txn.manager</name>
  <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
     <name>hive.compactor.initiator.on</name>
     <value>true</value>
</property>
<property>
     <name>hive.compactor.initiator.on</name>
     <value>1</value>
</property>

hive.support.concurrency:开启Hive锁管理器,提供多事务并发执行的功能。
hive.enforce.bucketing:开启自动按照分桶表指定的桶数进行分桶。
hive.exec.dynamic.partition.mode:关闭Hive的严格模式。
hive.txn.manager:管理Hive中的事务和锁。
hive.compactor.initiator.on:开启Initiator。
hive.compactor.initiator.on:指定运行Compactor的工作线程数。
进入hive-site.xml的方法如下图所示:
在这里插入图片描述

2、事务表的创建

在开启Hive事务的情况下, 创建的Hive表并不会直接变为事务表,需要在创建Hive表时通过属性值transactional声明创建的Hive表属于事务表。
例如在Hive中创建一个基于分桶的事务表tran_clustered_table,该表中包含列id、name、gender、age和dept,建表指令如下:

CREATE TABLE hive_database.tran_clustered_table (
id STRING,name STRING,gender STRING,age INT,dept STRING)
CLUSTERED BY (dept) INTO 3 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS ORC
TBLPROPERTIES ("transactional"="true",
  "compactor.mapreduce.map.memory.mb"="2048",
  "compactorthreshold.hive.compactor.delta.num.threshold"="4",
  "compactorthreshold.hive.compactor.delta.pct.threshold"="0.5"
);

“transactional”=“true”:表示创建的表为事务表。
“compactor.mapreduce.map.memory.mb”=“2048”:表示压缩任务触发的MapReduce任务使用的内存。
“compactorthreshold.hive.compactor.delta.num.threshold”=“4”:表示超过4个增量文件会触发次要压缩。
“compactorthreshold.hive.compactor.delta.pct.threshold”=“0.5”:表示增量文件的大小超过基础文件的50%触发主要压缩。
在这里插入图片描述

3、数据的插入

向事务表中插入数据的操作和向基础表中插入数据的操作一致,向刚刚创建的事务表中插入相关数据。

INSERT INTO TABLE hive_database.tran_clustered_table VALUES 
("001","user01","male",20,"YanFa"),
("002","user02","woman",23,"WeiHu"),
("003","user03","woman",25,"YanFa"),
("004","user04","woman",30,"RenShi"),
("005","user05","male",28,"YanFa"),
("006","user06","male",27,"CeShi"),
("007","user07","woman",33,"ShouHou"),
("008","user08","male",32,"CeShi");

上述指令执行完成之后,事务表tran_clustered_table在HDFS的存储目录/user/hive_local/warehouse/hive_database.db/tran_clustered_table/下会生成一个以delta开头的文件夹,该文件夹内的数据文件属于插入操作的增量文件。

4、更新操作

Hive事务表中的更新操作是指更新事务表中某一列的值或多个列的值,更新操作的语法格式如下:

UPDATE tablename SET column = value [, column = value ...] 
[WHERE expression]

UPDATE表示更新操作的HiveQL语句;tablename表示事务表名称;SET子句指定更新的列以及对应的值;column = value表示列名和对应的值;WHERE expression可选,表示通过WHERE子句指定条件expression根据指定条件更新列的值。
例如将刚刚创建并插入数据的表tran_clustered_table中员工姓名为user01的员工id更新为009,年龄更新为21,具体指令如下:

UPDATE hive_database.tran_clustered_table 
SET age = 21,id="009" 
WHERE name = "user01";

此时,事务表tran_clustered_table在HDFS的存储目录/user/hive_local/warehouse/hive_database.db/tran_clustered_table/下会生成一个以delta开头的文件夹,该文件夹内的数据文件为更新操作的增量文件。
注意事项:

  1. 更新的列必须在事务表中存在;
  2. 不能指定分区表中的分区字段作为更新列;
  3. 不能指定分桶表中的分桶字段作为更新列。

5、删除操作

Hive事务表的删除操作是指删除Hive表中符合指定条件的所有数据,这里的Hive表只支持事务表,有关Hive中删除操作的语法格式如下:

DELETE FROM tablename [WHERE expression]

DELETE表示删除事务表数据的语句;FROM子句指定删除数据的事务表;WHERE expression可选,表示通过WHERE子句指定条件expression。
例如删除事务表tran_clustered_table中员工姓名为user01的员工,具体指令如下:

DELETE FROM hive_database.tran_clustered_table WHERE name = "user01";

此时,事务表tran_clustered_table在HDFS的存储目录/user/hive_local/warehouse/hive_database.db/tran_clustered_table/下会生成一个以delta开头的文件夹,该文件夹内的数据文件为更新操作的增量文件。

参考文献:黑马程序员.Hive数据仓库应用[M].北京:清华大学出版社,2021.

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

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

相关文章

【LeetCode刷题笔记】动态规划 — 70.爬楼梯

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

Python不是一种伟大的编程语言?

作为一门简洁易用、生态蓬勃且具有高泛用性的编程语言&#xff0c;Python一直以来都被不少人称作“编程语言中的瑞士军刀”。 尤其随着近来AI热潮席卷全球&#xff0c;Python在编程语言圈中的地位也随之水涨船高&#xff0c;甚至一度被视作AI专用语言或大数据专用语言。 然而…

Netty核心原理:一、基础入门-04:NettyServer字符串解码器

文章目录 一、前言介绍二、代码实现2.1 工程结构2.2 Netty服务端字符串解码器实现2.2.1 服务端处理器2.2.2 通道初始化2.2.3 netty服务端 2.3 单元测试 一、前言介绍 &#x1f4a1; 服务端接收数据后我们希望是一个字符串或者是一个对象类型,而不是字节码。 在 netty 中是否可以…

数据结构与算法基础-学习-33-归并排序

目录 一、基本思想 二、算法思路 1、合并两个有序序列 2、分治法 三、算法源码 1、MergeSortTwoSortData 2、TwoWayMergeSortRecurtionSentryQueue 四、算法效率分析 五、Linux环境编译测试 六、小感慨 排序的其他相关知识点和源码分享可以参考之前的博客&#xff1a…

解决 Android 依赖冲突

解决办法 问题原因就是&#xff0c;各个模块所有的依赖&#xff08;递归&#xff09;的 jar 包最后都会加载到安卓的项目中&#xff0c;你可以选择 project 形式查看 External Libraries&#xff0c;都在这了。所以解决问题关键就是干掉冲突&#xff0c;剩下一个就行了&#xf…

将Apache服务与内网穿透结合,让您的网站可以公网访问

Apache服务安装配置与结合内网穿透实现公网访问 文章目录 Apache服务安装配置与结合内网穿透实现公网访问前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpo…

2023年中国电影行业研究报告

第一章 行业概况 1.1 定义 电影行业是一门涉及电影制作、发行、放映和推广的综合艺术和商业活动。它结合了戏剧、音乐、舞蹈、绘画等多种艺术形式&#xff0c;通过视觉和听觉的方式向观众展示故事和情感。 电影不仅仅是一门艺术&#xff0c;更是一项复杂的商业运作。它涵盖了…

element el-input 二次封装

说明&#xff1a;为实现输入限制&#xff0c;不可输入空格&#xff0c;长度限制。 inputView.vue <template><!-- 输入框 --><el-input:type"type":placeholder"placeholder"v-model"input"input"inputChange":maxle…

短信轰炸漏洞绕过的多种方法技巧

前言&#xff1a; 在测试甲方业务或者挖 SRC 等业务的时候&#xff0c;经常碰到发送短信验证的地方&#xff0c;我们可以联想到的就是任意用户登陆、短信轰炸、任意用户修改密码等逻辑性的漏洞&#xff0c; 简单的漏洞也是需要清晰的思维分析&#xff0c;拿几个短信轰炸多个绕…

实战系列(三)| Mybatis和MybatisPlus区别,包含详细代码

目录 1. 底层框架&#xff1a;2. 代码差异&#xff1a;3. 使用差异&#xff1a;4. 案例代码分析&#xff1a;4.1 MyBatis4.2 MyBatisPlus MyBatis 和 MyBatisPlus 都是基于 MyBatis 的扩展库&#xff0c;用于简化 MyBatis 的开发。MyBatisPlus 是在 MyBatis 的基础上进行封装&a…

华为云云耀云服务器L实例评测 | 华为云云耀云服务器L实例使用教学

文章目录 前言一、登录华为云二、创建云服务器L实例三、登录云服务器L实例四、使用云服务器L实例后记 前言 华为云是中国领先的云计算服务提供商之一&#xff0c;旗下的云耀云服务器是一种高性能、高可靠性、灵活可扩展的云服务器。 下面&#xff0c;我将为大家介绍华为云云耀云…

STM32-固件打包部署

STM32-固件打包部署 Fang XS.1452512966qq.com STM32固件输出 工程上使用Keil开发STM32软件&#xff1b;在调试过程中&#xff0c;可直接编译下载&#xff1b;例如bootloader和APP&#xff0c;在调试时&#xff0c;可以直接下载2次&#xff1b;但是工程上&#xff0c;需要大…

第四章 Linux常用命令

第四章 Linux常用命令 1.Linux命令 ​ 要使用命令&#xff0c;必须先启动Shell程序。用户可以通过桌面右键打开终端&#xff0c;或使用CtrlAltT组合启动Shell&#xff0c;当然也可以从左侧dock面板上找到终端图标打开&#xff0c;打开后如下图&#xff1a; ​ Shell命令由命令…

真嘟假嘟?!这么清晰简单的字符函数和字符串函数!!!

目录​​​​​​​ 1. 字符分类函数 1.1 小练习 1.1.1 方法一 2. 字符转换函数 2.1 小练习的方法二 3. strlen的使⽤和模拟实现 3.1 注意事项 3.1.1 注意事项2的练习 3.2 strlen函数的模拟实现 3.2.1 方法一 3.2.2 方法二&#xff08;指针—指针&#xff09; 3.2.…

Unreal Engine Loop 流程

引擎LOOP 虚幻引擎的启动是怎么一个过程。 之前在分析热更新和加载流程过程中&#xff0c;做了一个图。记录一下&#xff01;&#xff01; ![在这里插入图片描述](https://img-blog.csdnimg.cn/f11f7762f5dd42f9b4dd9b7455fa7a74.png#pic_center 只是记录&#xff0c;以备后用…

C++ 中 API 兼容与 ABI 兼容万字详解

文章目录 API 的生命周期兼容性级别向后兼容性向前兼容性功能兼容性源代码兼容性二进制兼容性 究竟是什么导致了二进制不兼容二进制不兼容可能导致的现象怎样维护源代码兼容添加功能修改功能弃用声明&#xff08;向后兼容&#xff09;移除功能&#xff08;向后兼容&#xff09;…

【大数据之Kafka】十、Kafka消费者工作流程

1 Kafka消费方式 &#xff08;1&#xff09;pull&#xff08;拉&#xff09;模式&#xff1a;消费者从broker中主动拉取数据。&#xff08;Kafka中使用&#xff09; 不足&#xff1a;如果Kafka中没有数据&#xff0c;消费者可能会陷入循环&#xff0c;一直返回空数据。 &#…

【性能测试】数据库优化

数据库优化 1. Oracle 1&#xff09;查询和修改数据库最大连接数 查看当前的数据库连接数: select count(*) from v$process; 数据库允许的最大连接数: select value from v$parameter where name processes; 修改数据库最大连接数: ----设置数据库最大连接数为2000 alte…

CSP 202305-2 垦田计划

直接用循环找最长天数的寻常写法只能拿15分&#xff0c;便运行超时结束了 #include <iostream> using namespace std; int main(){int n,m,k,t0;cin>>n>>m>>k;auto*datanew pair<int ,int>[n];for(int i0;i<n;i){cin>>data[i].first&g…

43.MQ—RabbitMQ

目录 一、MQ—RabbitMQ。 &#xff08;1&#xff09;同步调用与异步调用。 &#xff08;1.1&#xff09;同步调用。 &#xff08;1.2&#xff09;异步调用。 &#xff08;2&#xff09;MQ之间的区别。 &#xff08;3&#xff09;RabbitMQ学习。 &#xff08;3.1&#xf…