实训笔记7.27

实训笔记7.27

  • 7.27笔记
    • 一、Hive数据仓库基本概念(处理结构化数据)
      • 1.1 Hive的组成架构
        • 1.1.1 Hive的客户端
        • 1.1.2 Hive的驱动程序
        • 1.1.3 Hive的元数据库
      • 1.2 Hive和数据库的区别
    • 二、Hive的安装配置
    • 三、Hive的相关配置项
    • 四、Hive的基本使用方式
      • 4.1 使用Hive的命令行客户端操作Hive
        • 4.1.1 hive命令行的使用有三种方式
      • 4.2 使用hiveserver2方法操作Hive
      • 4.3 在Hive客户端中也可以直接操作HDFS和Linux的文件系统
    • 五、Hive中HQL语法
      • 5.1 DDL语法
        • 5.1.1 数据库的管理语法
        • 5.1.2 数据表的管理语法
      • 5.2 DML语法
      • 5.3 DQL语法
    • 六、相关代码

7.27笔记

一、Hive数据仓库基本概念(处理结构化数据)

Hive数据仓库相当于是Hadoop的一个客户端,一个类SQL操作的客户端。Hive会使用数据库和数据表的形式进行结构化数据的存储,只不过Hive只提供库和表的结构,真实的表数据还是存放在HDFS上,Hive会使用一个叫做元数据库的概念将表数据和数据表进行关联。同时Hive也可以类SQL的查询语言对表数据进行统计分析,但是类SQL查询语言底层会被hive的驱动程序转换成为MapReduce程序在YARN上进行运行。

1.1 Hive的组成架构

1.1.1 Hive的客户端

Hive的客户端:HiveCli–hive的命令行 Java API等等 是用来编写HQL语言的媒介

1.1.2 Hive的驱动程序

Hive的驱动程序:解析器、编译器、优化器、执行器,四个驱动程序是将HQL语言转换成为MR、Spark、TEZ等分布式计算程序的核心。

1.1.3 Hive的元数据库

Hive的元数据库:hive的元数据库中存储了Hive中创建的数据库、数据表、表字段和字段类型以及表数据和数据表之间的映射关系。 Hive的元数据库不是在Hive中存放的,而是在一个关系型数据库derby、MySQL、SQL Server、Oracle等等中存放。默认情况下如果没有进行任何的配置,hive默认会在derby数据库存放元数据(hive-default.xml.templete默认文件配置的)

1.2 Hive和数据库的区别

虽然Hive使用了数据库类似的SQL语言,但是Hive和数据库完全不是一回事,只是Hive使用了数据库的相关思想简化了我们对海量数据的存储和计算操作。Hive底层的实现和数据库的实现完全不一样,Hive底层的实现还是基于大数据的分布式计算和分布式存储思想实现的,数据库的底层实现是数据库的相关原理性内容。

二、Hive的安装配置

  1. 上传Hive的安装包、解压缩、配置环境变量

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NRT6V7Yk-1690454364156)(F:/Typora/%E5%AE%9E%E8%AE%ADmd/%E7%AC%AC%E5%8D%81%E5%91%A8/7.27/97ba37bae1cce636fc8710e54e0315c5f172b5733b6f12505b4bc343c180cb08.png)]

  2. 解决Hive和其他软件的依赖冲突问题

    1. Hive的日志框架依赖和Hadoop的框架依赖冲突,将hive的lib目录下的

      log4j-slf4jxxxxx

    2. Hive的guava的第三方依赖和Hadoop的依赖冲突了,将hive的guava依赖删除了,然后将Hadoop下的依赖复制到hive的lib目录下即可

  3. 在Hive中引入一个依赖文件–JDBC连接MySQL的驱动依赖—配置hive的元数据库到MySQL中

  4. 修改hive的相关配置文件

    1. hive-env.sh

      1. export HADOOP_HOME

      2. export HIVE_CONF_DIR

        之所以指定hive的配置文件目录,是因为hive默认提供的配置文件都是一个临时后缀名的文件,更像是一个hive的配置模块,Hive在默认情况下找不到配置文件目录

    2. hive-log4j2.properties

      1. 配置了hive在运行中输出日志的保存目录
      2. 以后hive出现任何的问题(初始化元数据库、hive的HQL执行的问题),如果看不到具体的错误信息,在配置的日志保存目录下的hive.log文件中查看详细的出错信息
      3. 日志主要分为:DEBUG INFO,WARN ERROR
    3. hive-site.xml(需要手动创建)

      1. 这个文件中主要配置hive的相关配置项,配置项默认在hive-default.xml.template文件中都存在,但是如果我们在hive-site.xml文件中配置了相同的配置项,会覆盖hive-default.xml同样的配置。
      2. hive-site.xml文件中第一行和第二行代码是xml文件的核心,如果第一行和第二行出现多余的空格或者少了字符,xml文件就不会解析或者解析失败
      3. 主要先配置了和元数据库有关的四项配置:URL(在xml中 &符合必须使用&标识)、Driver、Username、Password
  5. 使用hive之前,必须先初始化hive的元数据库,初始化只需要做一次,初始化元数据库和在hive-site.xml文件中配置的元数据库有关系的 schematool -initSchema -dbType mysql -verbos

    配置Hive的时候,Hive底层需要MapReduce运行,但是hive的HQL语句转换的MR程序启动多少个map任务,多少个reduce任务都是不一定,因此如果转换的MR的任务书过多,而你的Hadoop集群的计算资源(CPU、内存不足)语法没问题,但是HQL语句执行会报错—报错资源不足:xxxG of xxxG 使用Hive之前,最好在Hadoop的mapred-site.xml和yarn-site.xml文件中把资源调整一下

三、Hive的相关配置项

  1. Hive的表数据在HDFS上存储目录的配置

    Hive存储的表数据默认是在HDFS上存放的,默认存储到了HDFS的/user/hive/warehouse目录下

    Hive安装好以后,默认会给我们提供一个default数据库。如果在hive中我们没有指定使用哪个数据库,那么hive会默认使用default数据库。default数据库中相关表数据都在/user/hive/warehouse路径下存放的 其他数据库的表数据会先在/user/hive/warehouse路径下创建一个xxx.db目录,然后再在这个目录下放对应数据库的表数据

    hive的配置文件有一个配置项可以更改hive表数据的存储目录:

    hive.metastore.warehouse.dir 默认配置的路径就是/user/hive/warehouse路径

  2. Hive的HQL语句执行的时候可以转换成为MR程序、Spark程序、TEZ程序,默认情况下转换成为MR程序hive-default.xml.template中有一个配置项可以指定MR底层的转换规则:

    hive.execution.engine mr

  3. 配置hive的数据库名和表头的显示

    默认情况下,HiveCli-hive的命令行的客户端使用了某个数据库以后无法直观看到我们正在使用哪个数据库,包括查询表数据的时候,只会展示表数据,表字段不会展示。

     <property>      
     	<name>hive.cli.print.header</name>      
     	<value>true</value>  
     </property>   
     <property>      
    	 <name>hive.cli.print.current.db</name>      
     	<value>true</value>  
     </property>
    
  4. hive常用的客户端有两种

    1. Hive的命令行客户端:hive命令 命令行客户端只能在hive安装的节点上使用

    2. Hive的JDBC客户端操作

      如果我们想在其他机器、节点上操作hive,hive命令行客户端就无法使用了,但是我们可以使用JDBC远程连接hive操作hive。但是如果使用jdbc连接hive,那么hive必须启动一个对应的服务hiveserver2,只有启动了这个服务,我们才能使用jdbc远程连接hive。

      hivesever2是hive的远程连接服务,远程连接服务器会启动一个端口,通过端口可以进行通信远程操作Hive,在默认情况下,Hiveserver2没有配置的,我们需要自己配置并且启动。

      1. 配置hive-site.xml文件

      2. 配置Hadoop的core-site.xml文件 是因为hiveserver2启动之后,远程连接是需要用户名和密码的,远程连接的使用的用户名和密码默认是不能访问HDFS的。

      3. 启动hiveserver2:

        nohup hiveserver2 1>/opt/app/hive-3.1.2/hive.log 2>&1 &

        【注意】hiveserver2后端启动的时候,需要将日志输出到一个设置的指定文件中,日志文件赋予777的权限

      4. JDBC连接操作Hive有三种方式

        1. 使用一种叫做beeline客户端连接hiveserver2服务进行操作,beeline是一种命令行工具,只不过命令行工具底层需要通过JDBC的方式去操作hive。beelinehive有集成的。我们可以单独安装
        2. 使用DBeaver连接hiveserver2进行操作,DBeaver连接相关数据库都是使用JDBC的方式进行连接
        3. 使用原生的Java代码去连接hiveserver2进行操作,七步曲

四、Hive的基本使用方式

4.1 使用Hive的命令行客户端操作Hive

好处:只需要启动了HDFS和YARN,就可以直接使用了,不需要启动任何的hive服务

缺点:只能在hive的安装节点上使用

4.1.1 hive命令行的使用有三种方式

  1. hive——————直接执行hive会进入hive的交互式命令行窗口,在窗口中写一行HQL语句,只要一敲回车执行一行HQL语句

  2. hive -e "HQL语句"——————不需要进入hive的交互式命令行也可以快速的执行hive的HQL语句,缺点只能执行一条

  3. hive -f xxx.sql --hiveconf key=value --hivevar key=value

    可以将需要执行的HQL语句封装到一个SQL文件当中,文件当中可以编写多条HQL语句,只需要每一条HQL语句以分号分割即可。

    –hiveconf选项可以增加可以不增加,如果添加了 代表向sql文件传递一个参数,参数在SQL文件可以使用${hiveconf:key}获取参数的值

    –hivevar选项传递的参数需要通过${hivevar:key}

    如果传递多个参数,使用hiveconf传递:

    hive -f xxx.sql --hiveconf key=value --hiveconf key=value

    如果传递多个参数,使用hivevar传递:

    hive -f xxx.sql --hivevar key=value --hivevar key=value

4.2 使用hiveserver2方法操作Hive

好处:可以在任何一台节点,通过JDBC的远程连接方式去远程操作Hive

缺点:因为远程连接需要通过网络传输数据,速度没有直接使用hive客户端快

4.3 在Hive客户端中也可以直接操作HDFS和Linux的文件系统

dfs 选项 HDFS路径

!命令 相关操作—Linux的相关操作

【注意】命令行客户端支持使用sql文件执行多个HQL命令,其中sql文件中可以添加注释,在Hive的SQL文件中 注释语言–空格 注释。 DBeaver中SQL编辑器中也是同样的道理,-- 注释

五、Hive中HQL语法

Hive中提供了类SQL语法进行数据的存储和计算操作,存储的数据也都是以表格和库的形式存在的。因此HQL语言和SQL语言有很多相似之处,但是也有很多的操作不一样的。

5.1 DDL语法

数据库和数据表的管理语法:创建、删除、修改、查询数据库和数据表的语法

5.1.1 数据库的管理语法

  1. 创建语法

    create database [if not exists] database_name 
    [comment   "备注"]     #给数据库加个介绍和备注 
    [location  "hdfs路径"]   #指定数据库的数据在HDFS上的存储位置,如果没有指定,那么默认存储到hdfs的/user/hive/warehouse/xxx.db 
    [with  dbproperties(key=value,key=value)]
    
  2. 修改语法

    数据库不能改名字以及数据库在HDFS上的位置,但是可以修改数据库的dbproperties

    属性值

    alter database database_name set dbproperties('createtime'='20180830');

  3. 查看语法

    show databases:    #查看hive中有哪些数据库
    show dataabases like '名字'  #查询带有这个名字的数据库有哪些
    desc  database  数据库名;  #查看数据库的简略信息
    desc  database  extended 数据库名;   #查看数据库的详细信息
    
  4. 使用语法

    use 数据库名;

  5. 删除数据库语法

    drop database database_name [cascade];

5.1.2 数据表的管理语法

  1. 创建数据表的语法

    CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name #external 外部的 
    [(col_name data_type [COMMENT col_comment], ...)]   #表字段 
    [COMMENT table_comment]     #表的备注 
    [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] #hive中特有的数据表 分区表 
    [CLUSTERED BY (col_name, col_name, ...) #hive中特有的数据表  分桶表 
    [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]  #分桶表的信息
    [ROW FORMAT row_format]  #表字段之间的分隔符 
    [STORED AS file_format]  #hdfs存储的文件的类型格式 默认是文本格式 
    [LOCATION hdfs_path]     #单独指定数据表在hdfs上存储的目录,如果没有指定 那么就在表对应的数据库的路径下
    
  2. Hive中有四种类型的表–一张数据表可能同时满足多个类型

    1. 管理表/内部表

      create table table_name(.......)

      管理表是Hive具备所有权限的一张表,如果把表删除了,那么表数据文件在HDFS上也会同步删除

    2. 外部表

      create external table table_name(......)

      hive对于外部表只具备查询和添加数据的操作,如果外部表删除,只是在hive中把表元数据信息删除了 表数据在hdfs还依然存在

      在有些情况下,我们使用的数据不只只有hive在使用,spark flink可能都在使用这个数据,因此hive如果不使用这个数据了,把表删除了,但是数据是不能删除的,此时这样的表设置成为外部表。

    3. 分区表

      create [external] table  table_name(.......)
      comment "" partitioned by(分区字段 字段类型,第二个分区字段 字段类型)
      row format .......
      

      分区表可以是管理表也可以是外部表,分区表和普通数据表不一样的地方在于,在HDFS存储数据的时候,非分区表是将数据以文件的形式直接存储到数据表所在目录下,而分区表会先在数据表所在目录下创建一个一个文件夹,然后再在文件夹里面放对应分区的数据,文件夹都是按照指定的数值进行操作的。

      如果创建一个分区表,指定一个或者多个分区字段,分区字段的值有多个,那么在数据库表的目录下创建多个不同的文件夹存放不同分区的数据

      分区表的目的是将表数据按照指定的规则分为不同的区域,这样的话以后我们在处理数据的时候可以按照指定的区域获得我们想要的数据。

      分区表需要指定分区字段,分区字段一定不能是表字段

      分区表增加数据的语法:

      insert into table_name partition(分区字段=值) values(表字段值)

    4. 分桶表

      create [external] table  table_name(.......) 
      comment "" partitioned by(分区字段 字段类型,第二个分区字段 字段类型) 
      clustered by(分桶字段--一定表字段)   
      [sorted by (排序字段  asc|desc)]   into   num  buckets; 
      row format .......
      

      分桶表既可以是分区表,也可以是外部表,还可以是内部表。分桶表指的是将最终存储的结果文件存储为指定个数个文件,就相当于是MR程序在执行时,启动了多个reduceTask,每个reudceTask输出一个结果文件。

  3. 修改数据表的语法

    1. 修改表名

      alter table table_name rename to new_table_name

    2. 修改/增加/替换列

      alter table table_name change old_column new_column type

    3. 增加分区信息–不是增加分区字段,而是增加基于现有的分区字段增加一个新的目录

      alter table table_name add partition(分区字段=分区值)

    4. 删除分区信息

      alter table table_name drop partition(分区字段=分区值)

  4. 查看表的相关信息语法

    show tables;  #查看某一个数据库下的所有数据表
    desc 表名    #查看某个表的字段、分区字段
    desc  formatted 表名      #查看某个表的详细信息
    show partitions 表名   #查看某个表有多少个分区
    

5.2 DML语法

5.3 DQL语法

六、相关代码

-- 在hive客户端(命令行、JDBC方式的客户端)中执行HDFS的相关操作
dfs -ls /;
dfs -rm -r /demo;
-- 创建数据库的语法
create database if not exists demo01;--默认数据库数据存放到HDFS的/user/hive/warehouse路径下
create database if not exists demo02
comment "这是一个测试使用的专属数据库"
location "hdfs://192.168.35.101:9000/demo01"  -- 路径我们一般不会指定 默认路径就挺好
with dbproperties("createtime"="2023-7-27","createuser"="zhipeng","name"="demo02");

-- 修改数据库的语法
ALTER database demo02 set dbproperties("createtime"="2023-7-26","tablenum"="3");

-- 查看demo02的数据库信息
desc database demo02;

-- 查看demo02的详细信息
desc database extended demo02;

-- 使用数据库
use demo02;
create table student(student_name string);

-- 删除数据库
drop database demo01; -- 这个命令只能删除空数据库 非空数据库无法使用该命令删除
drop database demo02 cascade; -- 删除非空数据库 把库下的数据表以及表数据一并删除了

-- 表的创建语法
use demo;
-- 1、管理表/内部表
create table if not exists demo(
   username string comment "name",
   password string comment "password"
)comment "this is manager table"
row format delimited fields terminated by ","  lines TERMINATED BY "\n"
STORED AS TEXTFILE;

INSERT INTO demo values("zs","123456");

dfs -cat /user/hive/warehouse/demo.db/demo/000000_0;

-- 删除表
drop table demo;

-- 2、外部表
create external table if not exists demo(
   username string comment "name",
   password string comment "password"
)comment "this is external table"
row format delimited fields terminated by ","  lines TERMINATED BY "\n"
STORED AS SEQUENCEFILE;

-- 3、创建一个管理分区表 学生表 按照学生的性别分区
create table if not exists student(
   student_name string,
   student_age  int,
   student_phone string
)partitioned by(student_sex string)
row format delimited fields terminated by ",";

insert into student partition(student_sex="woman") values("dnn",20,"13566666666");

dfs -cat /user/hive/warehouse/demo.db/student/student_sex=man/000000_0_copy_1;

select * from student where student_sex="man";

-- 4、创建一个多级分区表
create table if not exists student1(
   student_name string,
   student_age  int,
   student_phone string
)partitioned by(student_sex string,student_birthday string)
row format delimited fields terminated by ",";

insert into student1 partition(student_sex="man",student_birthday="2023-07") 
values("qys",20,"1356666666");

-- 创建一个普通的分桶表教师表,要求按照教师的编号分为4个文件存储教师信息 每个文件中需要按照教师的年龄降序排序
create table if not exists teacher(
   teacher_num string,
   teacher_name string,
   teacher_age int
)clustered by (teacher_num) sorted by(teacher_age desc) into 4 buckets;

insert into teacher values("t001","zs",30),
                          ("t002","zs1",28),
                          ("t003","zs2",27),
                          ("t004","zs3",45),
                          ("t005","zs4",50),
                          ("t006","zs5",55),
                          ("t007","zs6",46),
                          ("t008","zs7",39),
                          ("t009","zs8",52),
                          ("t010","zs9",43);
dfs -cat /user/hive/warehouse/demo.db/teacher/000001_0;
-- 查看hive中所有配置项
set;

-- 分桶表的抽样查询  总共设置了4个桶  1 out of 2的意思 从第1个桶开始抽取4/2个桶的数据
select * from teacher tablesample(bucket 1 out of 8);

-- 按比例抽取时 如果抽取某一个数据块的大小小于128M  返回数据块的所有数据
select * from teacher tablesample(0.2 percent);

-- 修改表名
alter table teacher rename to teacher1;

alter table teacher1 change teacher_num teacher_number string;
alter table teacher1 add columns(teacher_phone string);
-- 增加分区
alter table student1 add partition(student_sex="woman",student_birthday="2023-08") 
                          partition(student_sex="no",student_birthday="2023-08");
-- 删除分区 分区下的数据丢失了
alter table student1 drop partition(student_sex="man",	student_birthday="2023-07");
            
--查看所有的数据表
show tables;
desc student1;
desc formatted student1;
show partitions student1;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DMA传输原理与实现详解(超详细)

DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09;是一种计算机数据传输方式&#xff0c;允许外围设备直接访问系统内存&#xff0c;而无需CPU的干预。 文章目录 Part 1: DMA的工作原理配置阶段&#xff1a;数据传输阶段&#xff1a; Part 2: DMA数据…

Jmeter+MySQL链接+JDBC Connection配置元件+使用

参考大大的博客学习&#xff1a;怎么用JMeter操作MySQL数据库&#xff1f;看完秒懂&#xff01;_jmeter mysql_程序员馨馨的博客-CSDN博客 注&#xff1a;里面所有没打码的都是假数据&#xff0c;麻烦大家自行修改正确的信息。 一、背景 需要取数据库中的值&#xff0c;作为…

分布式操作系统会不会是操作系统的终端形态?

昨天一位网友私信我&#xff0c;提出一个问题&#xff1a;“Laxcus分布式操作系统会不会是操作系统发展的终极形态&#xff1f;”。今天觉得有必要把这件事说一说&#xff0c;所以就忙里偷闲写下这篇文章。 咱们先说结论&#xff1a;是也不是&#xff0c;需要具体情况具…

C++--菱形继承

1.什么是菱形继承 单继承&#xff1a;一个子类只有一个直接父类时称这个继承关系为单继承 多继承&#xff1a;一个子类有两个或以上直接父类时称这个继承关系为多继承 菱形继承的问题&#xff1a;菱形继承有数据冗余和二义性的问题&#xff0c;数据冗余是由于创建多个相同类型的…

Gradle和Maven的区别

Gradle和Maven 当涉及到构建和管理项目时&#xff0c;Gradle和Maven是两个非常流行的选项。本文将讨论Gradle和Maven之间的区别以及它们的配置信息差异。 1. Gradle和Maven的区别 1.1 构建脚本语言 Maven使用XML作为构建脚本语言&#xff0c;而Gradle使用基于Groovy的DSL&…

❤️创意网页:创意动态画布~缤纷移动涂鸦~图片彩色打码

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

【Vue】在el-table的el-table-column中,如何控制单行、单列、以及根据内容单独设置样式。例如:修改文字颜色、背景颜色

用cell-style表属性来实现。在官网中是这样表述这个属性的。 在el-table中用v-bind绑定此属性。&#xff08;v-bind的简写是&#xff1a;&#xff09; <el-table:data"options":cell-style"cell"><el-table-column prop"id" label"…

设计模式-建造者模式

在前面几篇文章中&#xff0c;已经讲解了单例模式、工厂方法模式、抽象工厂模式&#xff0c;创建型还剩下一个比较重要的模式-建造者模式。在理解该模式之前&#xff0c;我还是希望重申设计模式的初衷&#xff0c;即为解决一些问题而提供的优良方案。学习设计模式遗忘其初衷&am…

图文教程:使用 Photoshop、3ds Max 和 After Effects 创建被风暴摧毁的小屋

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 在 Photoshop 中设置图像 步骤 1 打开 Photoshop。 打开 Photoshop 步骤 2 我已经将小屋的图像导入到Photoshop中以演示 影响。如果您愿意&#xff0c;可以使用其他图像。 图片导入 步骤 3 由于小…

css实现渐变边框动画

渐变边框动画 1、实现效果2、实现代码 1、实现效果 2、实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&…

Jenkins搭建最简教程

纠结了一小会儿&#xff0c;到底要不要写这个&#xff0c;最终还是决定简单记录一下&#xff0c;因为Jenkins搭建实在是太简单了&#xff0c;虽然也有坑&#xff0c;但是坑主要在找稳定的版本上。 先学一个简称&#xff0c;LTS (Long Term Support) 属实是长见识了&#xff0c…

【高级数据结构】并查集

目录 修复公路&#xff08;带扩展域的并查集&#xff09; 食物链&#xff08;带边权的并查集&#xff09; 修复公路&#xff08;带扩展域的并查集&#xff09; 洛谷&#xff1a;修复公路https://www.luogu.com.cn/problem/P1111 题目背景 A 地区在地震过后&#xff0c;连接…

Qt —— Vs2017编译hiredis源码并测试调用(附调用hiredis库源码)

下载hiredis源码 编译hiredis源码 1、解压下载的hiredis源码包,如图使用Vs2017打开hiredis_win.sln 2、如下两图,Vs2017打开.sln后点击升级。 分别对两个工程的debug、release进行配置。Debug配置为多线程调试DLL(MDd)、Release配置为多线程DLL(/MD),这样做是为了配合被调用…

GAMES104里渲染等一些剩下的问题

渲染的一些剩下的问题 1. 如何理解渲染中的AO(环境光遮蔽) 环境光遮蔽 我们先从一个简单的效果开始—环境光遮蔽(Ambient Occlusion,以下简称AO)。大家可以看到&#xff0c;下图中的场景没有任何渲染效果&#xff0c;也没有任何着色效果&#xff0c;但场景呈现出了非常清晰的…

Flutter:滑动面板

前言 无意中发现了这个库&#xff0c;发现现在很多app中都有类似的功能。以手机b站为例&#xff0c;当你在看视频时&#xff0c;点击评论&#xff0c;视频会向上偏移&#xff0c;下方划出评论界面。 sliding_up_panel SlidingUpPanel是一个Flutter插件&#xff0c;用于创建滑…

【Python机器学习】实验04(2) 机器学习应用实践--手动调参

文章目录 机器学习应用实践1.1 准备数据此处进行的调整为&#xff1a;要所有数据进行拆分 1.2 定义假设函数Sigmoid 函数 1.3 定义代价函数1.4 定义梯度下降算法gradient descent(梯度下降) 此处进行的调整为&#xff1a;采用train_x, train_y进行训练 1.5 绘制决策边界1.6 计算…

CentOS 7安装PostgreSQL 15版本数据库

目录 一、何为PostgreSQL&#xff1f; 二、PostgreSQL安装 2.1安装依赖 2.2 执行安装 2.3 数据库初始化 2.4 配置环境变量 2.5 创建数据库 2.6 配置远程 2.7 测试远程 三、常用命令 四、用户创建和数据库权限 一、何为PostgreSQL&#xff1f; PostgreSQL是以加州大学…

Python接口自动化测试框架运行原理及流程

这篇文章主要介绍了Python接口自动化测试框架运行原理及流程,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本文总结分享介绍接口测试框架开发&#xff0c;环境使用python3selenium3unittestddtrequests测试框…

【MyBatis-Plus 进阶学习笔记】

MyBatis-Plus 进阶学习笔记记录 一、 MyBatis Plus 七大功能0. 数据准备1. 逻辑删除2. 自动填充2.1 优化1 自动填充 有的类没有更新和创建时间字段2.2 优化2 自己设置时间时填充自己设置的&#xff0c;不设置时自动填充 3. 乐观锁插件 注&#xff1a;wrapper不能服用4. 性能分析…

Docker续集+Docker Compose

目录 Containerd与docker的关系 runCrunC与Containerd的关联 OCI协议Dockerfile多阶段构建&#xff08;解决&#xff1a;如何让一个镜像变得更小 &#xff09;多阶段构建Images瘦身实践.dockerignore Docker Compose快速开始Quick StartCompose 命令常用命令命令说明 Compose 模…