Hive分布式SQL计算平台

Hive分布式SQL计算平台

  • 一、Hive 概述
  • 二、Hive架构
  • 三、Hive客户端
    • 1、Hive有哪些客户端可以使用
    • 2、Hive第三方客户端
  • 四、Hive使用语法
    • 1、数据库操作
    • 2、内部表,外部表
    • 3、数据的导入与导出
    • 4、分区表
    • 5、分桶表
    • 6、复杂类型操作
    • 7、数据抽样
    • 8、Virtual Columns 虚拟列
    • 9、Hive函数

一、Hive 概述

使用Hadoop MapReduce直接处理数据所面临的问题 ,人员学习成本太高 需要掌握java、Python等编程语言
MapReduce实现复杂查询逻辑开发难度太大

基于Hive为用户提供了分布式SQL计算的能力,写的是SQL、执行的是MapReduce

使用Hive处理数据的好处

  • 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
  • 底层执行MapReduce,可以完成分布式海量数据的SQL处理
  1. 什么是分布式SQL计算?
    以分布式的形式,执行SQL语句,进行数据统计分析。

  2. Apache Hive是做什么的?
    将SQL语句翻译成MapReduce程序,从而提供用户分布式SQL计算的能力。
    传统MapReduce开发:写MR代码->得到结果
    使用Hive开发:写SQL->得到结果
    底层都是MR在运行,但是使用层面上更加简单了。

二、Hive架构

元数据管理,称之为Metastore服务
SQL解析器(Driver驱动程序),完成SQL解析、执行优化、代码提交等功能
用户接口:提供用户和Hive交互的功能

元数据存储:通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
Hive提供了 Metastore 服务进程提供元数据管理功能

Driver驱动程序:包括语法解析器、计划编译器、优化器、执行器:完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。

用户接口:包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。
Hive提供了 Hive Shell、 ThriftServer等服务进程向用户提供操作接口

三、Hive客户端

1、Hive有哪些客户端可以使用

  1. 执行:bin/hive,这是Hive提供的Shell环境,可以直接写SQL执行

  2. 启动HiveServer2,bin/hive --service hiveserver2

    这是Hive的Thrift服务,对外提供接口(默认端口10000)可供其它客户端链接,如:bin/beeline(内置)、IntelliJ IDEA (第三方)DataGrip(第三方)、DBeaver(第三方) 等

Hive的客户端体系如下

启动:在hive安装的服务器上,首先启动metastore服务,然后启动hiveserver2服务。

# 先启动metastore服务 然后启动hiveserver2服务
# 后台运行,并将标准输出和标准错误输出重定向到 /dev/null,使其不再显示在终端上,如有需要可以将日志重定向在文件中
nohup hive --service metastore 1>/dev/null 2>&1 &
nohup hive --service hiveserver2 1>/dev/null 2>&1 &

通过beeline连接

beeline  # 进入beeline
!connect jdbc:hive2://node1:10000	# 通过beeline连接hiveserver2
# 下面输入有hdfs权限的账号和密码,连接成功就可以操作了# 连在一起可以通过-u参数直接连接
beeline -u jdbc:hive2://single01:10000

2、Hive第三方客户端

IntelliJ IDEA 连接 hive

  • 打开Database窗口 (在IDEA中,点击菜单栏中的View -> Tool Windows -> Database,打开Database工具窗口)
  • 在Database工具窗口中,点击上方的加号+,选择Data Source -> Apache Hive
  • 填写Hive数据库的连接信息,包括JDBC URL(如jdbc:hive2://localhost:10000)、用户名和密码(如果Hive配置了认证)
    连接需要驱动,点击可以下载驱动

连接成功后,你就可以在IDEA中通过SQL编辑器编写和执行HiveQL语句了。这些语句将直接发送到HiveServer2执行,并返回结果。

在这里插入图片描述

四、Hive使用语法

1、数据库操作

创建数据库

-- 语法:CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION position];
create database if not exists myhive;
use myhive;
-- 查看数据库详细信息
desc database myhive;-- 创建数据库并指定hdfs存储位置,使用location关键字,可以指定数据库在HDFS的存储路径。
create database myhive2 location '/myhive2';

删除数据库

-- 语法:DROP DATABASE db_name [CASCADE];
-- 删除一个空数据库,如果数据库下面有数据表,那么就会报错
drop  database  myhive;-- 强制删除数据库,包含数据库下面的表一起删除
drop  database  myhive2  cascade;

数据库和HDFS的关系

  • Hive的库在HDFS上就是一个以.db结尾的目录
  • 默认存储在:/user/hive/warehouse
  • 可以通过LOCATION关键字在创建的时候指定存储目录

2、内部表,外部表

创建表的语法

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name  
-- EXTERNAL: 可选,表示创建一个外部表。如果指定,则Hive不会管理表的数据文件,删除表时数据文件不会被删除。 [(col_name data_type [COMMENT col_comment], ...)]  -- 表的列定义,包括列名、数据类型和可选的列注释。可以定义多列,列之间用逗号分隔。  [COMMENT table_comment]  -- 可选,为整个表添加注释。  [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...) ]  -- 可选,定义表的分区列。分区列用于将数据分割成不同的部分,以提高查询性能。分区列也是表的一部分,但具有特殊的意义。  [CLUSTERED BY (col_name, col_name,...)  [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]  -- 可选,定义表的分桶策略。分桶通常与排序(SORTED BY)一起使用,但不是必须的。分桶可以提高某些查询的性能,特别是当进行抽样或需要局部排序时。  [ROW FORMAT row_format]  -- 可选,定义行的格式。常见的格式包括Delimited(分隔符分隔的字段)和SerDe(序列化/反序列化)。  -- 对于Delimited,通常还需要指定字段分隔符、集合元素分隔符等。  [STORED AS file_format]  -- 指定表数据的存储格式。Hive支持多种存储格式,如TEXTFILE、SEQUENCEFILE、ORC、PARQUET等。  -- 这些格式在压缩、性能、兼容性等方面有所不同。  [LOCATION hdfs_path]  -- 可选,指定表数据在HDFS上的存储位置。对于外部表来说,这个选项特别有用,因为它允许你指定表数据已经存在的位置。  -- 对于内部表,如果不指定LOCATION,Hive将在默认的仓库目录中为表创建一个目录。

关键词:EXTERNAL,创建外部表、PARTITIONED BY, 分区表、CLUSTERED BY,分桶表、STORED AS,存储格式、LOCATION,存储位置

数据类型

分类类型描述字面量示例
原始类型BOOLEANtrue/falseTRUE
TINYINT1字节的有符号整数-128~1271Y
SMALLINT2个字节的有符号整数, -32768~327671S
INT4个字节的带符号整数1
BIGINT8字节带符号整数1L
FLOAT4字节单精度浮点数1.0
DOUBLE8字节双精度浮点数1.0
DEICIMAL任意精度的带符号小数1.0
STRING字符串,变长“a" ‘b’
VARCHAR变长字符串“a", ‘b’
CHAR固定长度字符串“a", ‘b’
BINARY字节数组
TIMESTAMP时间戳,毫秒值精度122327493795
DATE日期‘2016-03-29’
时间频率间隔
复杂类型ARRAY有序的的同类型的集合array(1,2)
MAPkey-value,key必须为原始类型, value可以任意类型map(‘a’,1,‘b’,2)
STRUCT字段集合,类型可以不同struct(‘1’,1,1.0), named_stract(‘col1’,‘1’,‘col2’,1, ‘clo3’,1.0)
UNION在有限取值范围内的一个值create_union(1,‘a’ ,63)

Hive中可以创建的表有好几种类型, 分别是:内部表、外部表、分区表、分桶表

内部表(CREATE TABLE table_name …)

  • 未被external关键字修饰的即是内部表, 即普通表。 内部表又称管理表,内部表数据存储的位置由hive.metastore.warehouse.dir参数决定(默认:/user/hive/warehouse),删除内部表会直接删除元数据(metadata)及存储数据,因此内部表不适合和其他工具共享数据。

外部表(CREATE EXTERNAL TABLE table_name …LOCATION…)

  • 被external关键字修饰的即是外部表, 即关联表。
  • 外部表是指表数据可以在任何位置,通过LOCATION关键字指定。 数据存储的不同也代表了这个表在理念是并不是Hive内部管理的,而是可以随意临时链接到外部数据上的。
  • 在删除外部表的时候, 仅仅是删除元数据(表的信息),不会删除数据本身。
创建存储位置删除数据理念
内部表CREATE TABLE …Hive管理,默认/user/hive/warehouse删除 元数据(表信息)删除 数据Hive管理表持久使用
外部表CREATE EXTERNAL TABLE …随意,LOCATION关键字指定仅删除 元数据(表信息)保留 数据临时链接外部数据用

数据分隔符

  • 默认是特殊字符: ‘\001’ (^A soh)
  • 可以通过row format delimited fields terminated by在创建表的时候修改

其它创建内部表的形式

-- CREATE TABLE table_name as,基于查询结果建表
create table stu3 as select * from stu2;-- CREATE TABLE table_name like,基于已存在的表结构建表
create table stu4 like stu2;-- DESC FORMATTED table_name,查看表类型和详情
DESC FORMATTED stu2;

外部表的创建

  • 可以先有表,然后把数据移动到表指定的LOCATION中
  • 也可以先有数据,然后创建表通过LOCATION指向数据
-- 首先检查:hdfs dfs -ls /tmp,确认不存在/tmp/test_ext1目录
create external table test_ext1(id int, name string
) row format delimited fields terminated by '\t' 	-- 分隔符location '/tmp/test_ext1';						-- 可以看到,目录/tmp/test_ext1被创建
-- 上传数据: hadoop fs -put test_external.txt /tmp/test_ext1/
-- select * from test_ext1; 即可看到数据结果
-- 先存在数据,后创建外部表,同理

内部表外部表转换

talbename set tblproperties('EXTERNAL'='TRUE') 	-- 注意大写
talbename set tblproperties('EXTERNAL'='FALSE')	

3、数据的导入与导出

1)数据加载

1、使用 LOAD 语法,从外部将数据加载到Hive内(不会走MapReduce 小文件速度快)

--加载数据				   数据路径  						 被加载的内部表
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename;
  • 使用local,数据不在HDFS,可以使用file://协议指定路径
  • 不使用local,数据在HDFS,可以使用HDFS://协议指定路径
  • OVERWRITE 代表覆盖已有数据

注意:基于HDFS进行load加载数据,源数据文件会消失(本质是被移动到表所在的目录中)

2、可以通过SQL语句,从其它表中加载数据

--		是否覆盖
INSERT [OVERWRITE | INTO] TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;--示例
INSERT INTO TABLE tbl1 SELECT * FROM tbl2;
INSERT OVERWRITE TABLE tbl1 SELECT * FROM tbl2;

注意:走MapReduct少了数据时不如直接导入

2)数据导出

1、将查询的结果导出

-- 将查询的结果导出到本地 - 使用默认列分隔符
insert overwrite local directory '/home/hadoop/export1' select * from test_load;-- 将查询的结果导出到本地 - 指定列分隔符
insert overwrite local directory '/home/hadoop/export2' row format delimited fields terminated by '\t' select * from test_load;-- 将查询的结果导出到HDFS上(不带local关键字)
insert overwrite directory '/tmp/export' row format delimited fields terminated by '\t' select * from test_load;

2、hive表数据导出 - hive shell

-- 基本语法:(hive -f/-e 执行语句或者脚本 > file)
hive -e "select * from myhive.test_load;" > /home/hadoop/export3/export4.txthive -f export.sql > /home/hadoop/export4/export4.txt

4、分区表

可以选择字段作为表分区
分区其实就是HDFS上的不同文件夹
分区表可以极大的提高特定场景下Hive的操作性能
分区表的分区列,在partitioned by 中定义,不在普通列中定义

​ 左侧单分区表 右侧多分区表(三级分区)

分区表的使用

1、创建分区表,加载数据

-- 基本语法
create table tablename(...) partitioned by (分区列 列类型, ......) 
row format delimited fields terminated by '';-- 创建分区表 按照月分区
create table score(id string, cid string, score int) partitioned by (month string)
row format delimited fields terminated by '\t';-- 向202006分区插入数据
load data local inpath '/root/data/score.txt' into table score partition(month = '202006');-- 多级分区
create table score2(id string, cid string, score int) partitioned by (year string, month string, day string)
row format delimited fields terminated by '\t';-- 多级分区加载数据
load data local inpath '/root/data/score.txt' into table score2 partition(year="2024", month="05", day="20");

2、查看,修改,删除分区

-- 查看分区
show partitions score;-- 添加一个分区
alter table score add partition(month='202007');
-- 同时添加多个分区
alter table score add partition(month='202303') partition(month='202407');-- 修改分区值
ALTER TABLE tablename PARTITION (month='202005') RENAME TO PARTITION (month='201105');-- 删除分区
alter table score drop partition(month='202006');-- 修复表,如果数据已按分区目录导入hdfs,可以修复表一键导入分区
msck repair table score;

其余属性可参见 LanguageManual DDL - Apache Hive - Apache Software Foundation

5、分桶表

分桶和分区一样,也是一种通过改变表的存储模式,从而完成对表优化的一种调优方式
但和分区不同,分区是将表拆分到不同的子文件夹中进行存储,而分桶是将表拆分到固定数量的不同文件中进行存储。

在这里插入图片描述

分桶表创建

-- 开启分桶的自动优化(自动匹配reduce task数量和桶数量一致)
set hive.enforce.bucketing=true;
-- 创建分桶表
create table course (c_id string,c_name string,t_id string) clustered by(c_id) into 3 buckets 		-- 设置 分桶列c_id, 分三个桶row format delimited fields terminated by '\t';

分桶表加载数据

桶表的数据加载,由于桶表的数据加载通过load data无法执行,只能通过insert select.

-- 1. 创建一个临时表中转表(外部表或内部表均可),通过load data加载数据进入表
create table course_common(c_id string, c_name string, t_id string)row format delimited fields terminated by '\t';-- 普通表中加载数据
load data local inpath '/root/data/course.txt' into table course_common;-- 通过insert overwrite 给桶中加载数据
insert overwrite table course select * from course_common cluster by(c_id);

为什么不可以用load data,必须用insert select插入数据

  • 一旦有了分桶设置,比如分桶数量为3,那么,表内文件或分区内数据文件的数量就限定为3
  • 当数据插入的时候,需要一分为3,进入三个桶文件内。
  • 数据的三份划分基于分桶列的值进行Hash取模来决定
  • 由于load data不会触发MapReduce,也就是没有计算过程(无法执行Hash算法),只是简单的移动数据而已
    所以无法用于分桶表数据插入。

什么是Hash取模?

  • 基于Hash算法,对值进行计算,同一个值得到同样的结果
  • 对结果进行取模(除以桶数量得到余数),确认当前数据应该去哪一个桶文件
  • 同样key(分桶列的值)的数据,会在同一个桶中。

分桶表的性能提升

分区表的性能提升是:在指定分区列的前提下,减少被操作的数据量,从而提升性能。
分桶表的性能提升就是:基于分桶列的特定操作,如:过滤、JOIN、分组,均可带来性能提升。

  • 基于分桶列,过滤单个值:根据Hash值
  • 基于分桶列,进行双表JOIN:桶文件对桶文件
  • 基于分桶列,group by 分组:自动归并为各个组了

6、复杂类型操作

array类型

  1. array类型,主要存储:数组格式
    保存一堆同类型的元素,如:1, 2, 3, 4, 5

  2. 定义格式:
    array<类型>
    数组元素之间的分隔符:collection items terminated by ‘分隔符’

  3. 在查询中使用
    数组[数字序号],可以取出指定需要元素(从0开始)
    size(数组),可以统计数组元素个数
    array_contains(数组, 数据),可以查看指定数据是否在数组中存在

示例数据 和 代码

zhangsan	beijing,shanghai,tianjin,hangzhou
wangwu	changchun,chengdu,wuhan,beijin
create table myhive.test_array(name string, work_locations array<string>)row format delimited fields terminated by '\t'	-- 表示列分隔符是\tCOLLECTION ITEMS TERMINATED BY ',';				-- 表示集合(array)元素的分隔符是逗号-- 序号从0开始,取出第一位
select name, work_locations[0] from test_array;-- 查询array类型中的元素个数
select name, size(work_locations) location from myhive.test_array;-- 查询location数组中包含tianjin的信息
select * from test_array where array_contains(work_locations, 'tianjin');-- 加载上述数据
load data local inpath '/root/data/data_for_array_type.txt' into table test_array;

map类型

  1. map类型,主要存储:K-V键值对类型数据
    保存一堆同类型的键值对,如:“a”:1, “b”: 2, “c”: 3
  2. 定义格式:
    map<key类型, value类型>
    不同键值对之间:COLLECTION ITEMS TERMINATED BY ‘分隔符’ 分隔
    一个键值对内,使用: MAP KEYS TERMINATED BY ‘分隔符’ 分隔K-V
    如:father:xiaoming#mother:xiaohuang#brother:xiaoxu
    不同KV之间使用#分隔,同一个KV内用:分隔K和V
  3. 在查询中使用
    map[key]来获取指定key的值
    map_keys(map)取到全部的key作为array返回,map_values(map)取到全部values
    size(map)可以统计K-V对的个数
    array_contains(map_values(map), 数据) 可以统计map是否包含指定数据

示例数据 和 代码

1,林杰均,father:林大明#mother:小甜甜#brother:小甜,28
2,周杰伦,father:马小云#mother:黄大奕#brother:小天,22
3,王葱,father:王林#mother:如花#sister:潇潇,29
4,马大云,father:周街轮#mother:美美,26
create table test_map(id int, name string, member map<string, string>, age int
)
row format delimited
fields terminated by ','
collection items terminated by '#'   -- 每个键值对间的分隔符
MAP KEYS TERMINATED BY ':';          -- 单个键值对内部,键和值的分隔符alter table test_map change member members map<string, string>;load data local inpath '/root/data/data_for_map_type.txt' into table test_map;select * from test_map;-- 查看成员中,每个成员的父亲,母亲是谁
select id, name, members['father'], members['mother'] from test_map;-- 取出map中全部key,返回类型为array
select map_keys(members) from test_map;-- size 查看map的元素 (K-V对)的个数
select size(members) from test_map;-- array_contains 去查看指定的数据是否包含在map中,看看谁有王林这个value
select * from test_map where array_contains(map_values(members), '王林');

struct类型

  1. struct类型,主要存储:复合格式
    可以包含多个二级列,二级列支持列名和类型,如
    “a”: 1, “b”: “foo”, “c”: “2000-01-01”
  2. 定义格式:
    struct<name:string, age:int>
    struct的分隔符只需要:COLLECTION ITEMS TERMINATED BY ‘分隔符’ 只需要分隔数据即可(数据中不记录key,key是建表定义的固定的)
  3. 在查询中使用
    struct.key 即可取得对应的value

示例数据 和 代码

1#周杰轮:11
2#林均杰:16
3#刘德滑:21
4#张学油:26
5#蔡依临:23
create table myhive.test_struct(id int,info struct<name: string, age:int>
)
row format delimited
fields terminated by '#'
collection items terminated by ':';      -- 表示struct中二级列的数据之间的分割符load data local inpath '/root/data/data_for_struct_type.txt' into table test_struct;select * from test_struct;-- 查询内容
select id, info.name, info.age from test_struct;

7、数据抽样

大数据体系下,表内容一般偏大,小操作也要很久,所以如果想要简单看看数据,可以通过抽样快速查看

  • 桶抽样方式,TABLESAMPLE(BUCKET x OUT OF y ON(colname | rand())),推荐,完全随机,速度略慢块抽样,使用分桶表可以加速

    -- 10个抽3份 orderId Hash取模, 其他条件不变的话运行结果一致
    select * from orders tablesample (bucket 3 out of 10 on orderId);-- 完全随机,分10个桶随机抽3个
    select * from orders tablesample (bucket 3 out of 10 on rand());
    
  • 块抽样方式,TABLESAMPLE(num ROWS | num PERCENT | num(K|M|G)),速度快于桶抽样方式,但不随机,只是按照数据顺序从前向后取。

    select * from orders tablesample (100 rows);	-- 抽取前100条
    select * from orders tablesample (10 percent);	-- 抽取前10%
    select * from orders tablesample (1K);			-- 抽取前1KB
    

8、Virtual Columns 虚拟列

虚拟列是Hive内置的可以在查询语句中使用的特殊标记,可以查询数据本身的详细参数。

-- 虚拟列
-- INPUT__FILE__NAME            -- 显示数据行所在的具体文件
-- BLOCK__OFFSET__INSIDE__FILE  -- 显示数据行所在的偏移量
-- ROW__OFFSET__INSIDE__BLOCK   -- 显示数据所在HDFS块的偏移量, 设置 set hive.exec.rowoffset=true 才可使用
set hive.exec.rowoffset=true;select orderId, userName, INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, ROW__OFFSET__INSIDE__BLOCK from orders;-- (分区 分桶 表) 查看每个文件有多少条数据
select INPUT__FILE__NAME, count(*) FROM orders GROUP BY INPUT__FILE__NAME;

虚拟列的作用

  • 查看行级别的数据详细参数
  • 可以用于WHERE、GROUP BY等各类统计计算中
  • 可以协助进行错误排查工作

9、Hive函数

Hive的函数分为两大类:内置函数(Built-in Functions)、用户定义函数UDF(User-Defined Functions):

在这里插入图片描述

具体可查看:官方文档

show functions;
describe function extended funcname;	-- 来查看函数的使用方式。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot 项目整合 AI (文心一言)

百度智能云网址&#xff1a;https://cloud.baidu.com/?fromconsole 注册——个人认证——登录成功 第一步&#xff1a;点击千帆大模型平台 ​ 第二步&#xff1a;点击应用接入——创建应用 ​ 第三步&#xff1a;点击接口文档——API列表——可以点击指定模型进行查看调…

Spring Boot集成Activity7实现简单的审批流

由于客户对于系统里的一些新增数据&#xff0c;例如照片墙、照片等&#xff0c;想实现上级逐级审批通过才可见的效果&#xff0c;于是引入了Acitivity7工作流技术来实现&#xff0c;本文是对实现过程的介绍讲解&#xff0c;由于我是中途交接前同事的这块需求&#xff0c;所以具…

DolphinDB Web 端权限管理:可视化操作指南

在现代数据库管理中&#xff0c;高效和直观的权限管理对于用户的数据安全是至关重要的。过去 DolphinDB 用户需要依赖系统脚本来管理用户和权限&#xff0c;这对于缺乏技术背景的管理员来说既复杂又容易出错。 为了提升用户体验和操作效率&#xff0c;DolphinDB 目前在 Web 上…

【ACM出版】2024集成电路设计与集成系统国际研讨会(ICDIS2024)

会议日期&#xff1a;2024年11月22-24日 会议地点&#xff1a;中国-厦门 会议官网&#xff1a;https://www.iaast.cn/meet/home/Bx122dOo 【大会主席】 Sri Niwas Singh&#xff0c;印度信息技术与管理研究所 【主讲嘉宾】 【论文出版与检索】 大会即日起围绕主题征集会…

Beyond Compare 5 for Mac/Win:高效文件同步与对比的专业工具

Beyond Compare 5是一款专为Mac和Windows用户设计的强大文件同步与对比软件&#xff0c;由Scooter Software精心打造。它凭借卓越的功能和易用性&#xff0c;在软件开发、系统管理和数据同步领域广受好评。 这款软件支持多种文件类型的对比&#xff0c;包括文件夹、文本文件、…

(7) cmake 编译C++程序(二)

文章目录 概要整体代码结构整体代码小结 概要 在ubuntu下&#xff0c;通过cmake编译一个稍微复杂的管理程序 整体代码结构 整体代码 boss.cpp #include "boss.h"Boss::Boss(int id, string name, int dId) {this->Id id;this->Name name;this->DeptId …

开发环境搭建

1、Ubuntu 系统设置 root 用户密码 新安装的ubuntu没有设置 root 用户密码,打开终端,输入 sudo passwd root 执行命令后依次输入密码 2、虚拟机设置网络适配器 3、Ubuntu 系统下搭建 FTP 服务器 sudo apt-get update sudo apt-get install vsftpd sudo apt-get install vim…

如何切换网络IP地址?IP切换的应用与方法

随着互联网的发展和普及&#xff0c;我们日常生活中的各种操作和通讯越来越依赖互联网。互联网上存在的一些问题和限制使得更换IP地址成为必要的步骤。下面我们将探讨在互联网业务中&#xff0c;需要更换IP地址的原因与方法。 一、IP轮换的应用 解决访问限制&#xff1a;解决访…

HTTPServer改进思路1

Nginx源码思考项目改进 架构模式 事件驱动架构(EDA&#xff09;用于处理大量并发连接和IO操作 优点&#xff1a;高效处理大量并发请求&#xff0c;减少线程切换和阻塞调用技术实现&#xff1a;直接使用EPOLL&#xff0c;参考Node.js的http服务器 网络通信 协议&#xff1a;HTT…

Spark_Oracle_II_Spark高效处理Oracle时间数据:通过JDBC桥接大数据与数据库的分析之旅

接前文背景&#xff0c; 当需要从关系型数据库&#xff08;如Oracle&#xff09;中读取数据时&#xff0c;Spark提供了JDBC连接功能&#xff0c;允许我们轻松地将数据从Oracle等数据库导入到Spark DataFrame中。然而&#xff0c;在处理时间字段时&#xff0c;可能会遇到一些挑战…

上手实测!绿联新系统虚拟机真的卡到爆?!

上手初体验 入手绿联DXP2800也有一段时间了,先说一下这段时间的使用体验吧。刚收到设备的时候确实遇到了不少的问题,如网友普遍反映的UGREENlink服务无法连接、AI占用CPU资源、设备高温等问题我都遇到了 目前更新固件的频率已提升至约一两天一次。尽管仍存在一些小BUG,但不影响…

银行业务知识全篇(财务知识、金融业务知识)

第一部分 零售业务 1.1 储蓄业务 4 1.1.1 普通活期储蓄(本外币) 4 1.1.2 定期储蓄(本外币) 5 1.1.3 活期一本通 9 1.1.4 定期一本通 10 1.1.5 电话银行 11 1.1.6 个人支票 11 1.1.7 通信存款 13 1.1.8 其他业务规…

学习大数据DAY22 Linux 基 本 指 令 3与 在 Linux 系 统 中 配 置MySQL 和 Oracle

目录 网络配置类 ps 显示系统执行的进程 kill systemctl 服务管理 配置静态 ip 常见错误---虚拟机重启网卡失败或者网卡丢失 mysql 操作 上机练习 6---安装 mysql---参考《mysql 安装》文档 解锁 scott 重启后的步骤 上机练习 7---安装 oracle---参考《oracle 安装》…

三星Unpacked发布会即将举行:有新款折叠屏手机,还有智能戒指

随着7月的脚步渐近&#xff0c;科技界的目光再次聚焦于三星&#xff0c;它即将在法国巴黎举办今年的第二场Unpacked发布会。这不仅是一场新品的展示&#xff0c;更是三星对创新科技的一次深刻诠释。 从Galaxy Z Fold 6的全新设计&#xff0c;到Galaxy Z Flip 6的显著升级&…

Transformer自然语言处理实战pdf阅读

一.第一章 欢迎来到transformer的世界 1.解码器-编码器框架 在Transformer出现之前&#xff0c;NLP的最新技术是LSTM等循环架构。这些架 构通过在神经网络连接使用反馈循环&#xff0c;允许信息从一步传播到另一 步&#xff0c;使其成为对文本等序列数据进行建模的理想选择。如…

QtCreator和QtDesignStudio最佳实践

一、QTC和QDS工作流概述 很多初学者对 QDS(Qt Design Studio) 和 QTC(Qt Creator)如何配合经常存有疑问&#xff0c;本文介绍具体的工作流程。 工作流程 1.产品设计&#xff1a;通过PS、Figma、XD等专业工具设计页面视觉和原型。 2.QDS 原型制作&#xff1a;导入设计源文件、…

【数据结构】二叉树——顺序结构——堆及其实现

一、树 1.1、树的概念和结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点组成的一个具有层次关系的集合。 树有一个特殊的节点&#xff0c;称为根节点&#xff0c;根节点没有前驱结点。 除根节点外&#xff0c;其余部分被分为M&…

企业级 线上故障排查思路

线上故障排查思路 WARNING 简介&#xff1a;有哪些常见的线上故障&#xff1f;如何快速定位问题&#xff1f;本文详细总结工作中的经验&#xff0c;从服务器、Java应用、数据库、Redis、网络和业务六个层面分享线上故障排查的思路和技巧。较长&#xff0c;同学们可收藏后再看。…

【HZHY-AI300G智能盒试用连载体验】在华为IoTDA平台上建立设备

目录 华为IoTDA平台 注册IoTDA实例 创建产品 添加设备 本文首发于&#xff1a;【HZHY-AI300G智能盒试用连载体验】 智能工业互联网网关 - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛! 在上一篇博文中介绍了如何在HZHY-AI300G智能盒创建南向设备&a…

Github Desktop 关于将本地文件夹设置为新仓库的 使用笔记

实际要达到的结果: 将UE5工程同步到Github,工程太大,我们只需要将必要的工程文件夹同步即可,缓存等一些不必要的文件夹则不需要同步 最终效果预览: 1. 将本地文件夹设置为新仓库 将本地文件夹作为仓库一般你是没有这个仓库的,所以你需要新建一个仓库 如果忽略某些不必要的文…