当前位置: 首页 > news >正文

Hive数据仓库

数据仓库概念与起源发展由来

数仓概念

  • 数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。
  • 数据仓库的目的是构建面相分析的集成化数据环境,分析结果为企业提供决策支持(Decision Support)。

数仓专注分析

  • 数据仓库本身并不“产生”任何数据,其数据来源不同外部系统;
  • 同时数据仓库自身也不需要“消费”任何的数据,其结果开放给各个外部应用使用;
  • 这也是为什么叫“仓库”,而不叫“工厂”的原因。

数据仓库面世

  • 当分析所涉及数据规模较小时,在业务低峰期可以在OLTP系统上开展直接分析。
  • 但为了更好的进行各种规模的数据分析,同时也不影响OLTP系统运行,此时需要构建一个集成统一的数据分析平台。该平台的目的很简单:面相分析,支持分析,并且和OLTP系统解耦合。
  • 基于这种需求,数据仓库的出行开始在企业中出现。

数据仓库的构建

  • 如数仓定义所说,数仓是一个用于存储、分析、报告的数据系统,目的时构建面向分析、支持分析的系统称之为OLAP(联机分析处理)系统。当然,数据仓库OLAP系统的一种实现。

数据仓库主要特征——面向主体、集成、非易失、时变

数仓主要特征

  • 面向主题(Subject-Oriented):主题是一个抽象的概念,是较高层次上数据综合、归类并进行分析利用的抽象
  • 集成性(Integrated):主题相关的数据通常会分布在多个操作型系统中,彼此分散、独立、异构。需要集成到数仓主题下。
  • 非易失性(Non-Volatile):也叫非易变性。数据仓库是分析数据的平台,而不是创造数据的平台。
  • 时变性(Time-Variant):数据仓库的数据需要随着时间更新,以适应决策的需要。

面向主题性(Subject-Oriented)

  • 主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。
  • 传统OLTP系统对数据的划分并不适用于决策分析。而基于主题组织的数据则不同,它们被划分为各自独立的领域,每个领域有各自的逻辑内涵但互不交叉,在抽象层次上对数据进行完整、一致和准确的描述。

集成性(Integrated)

  • 主题相关的数据通常会分布在多个操作系统中,彼此分散、独立、异构。
  • 因此在数据进入数据仓库之前,必然要经过统一与综合,对数据进行抽取、清理、转换和汇总,这一步是数据仓库建设中最关键、最复杂的一步,所要完成的工作有:
  1. 要统一源数据中所有矛盾之处
    如字段的同名异义、异名同义、单位不统一、字长不一致等等。
  2. 进行数据综合计算
    数据仓库中的数据综合工作可以在从原有的数据库抽取数据时生成,但许多是在数据仓库内部生成的,即进入数据仓库以后进行综合生成的。

非易失性、非易变性(Non-Volatile)

  • 数据仓库是分析数据的平台,而不是创造数据的平台。我们是通过数仓去分析数据中的规律,而不是去创造修改其中的规律。因此数据进入数据仓库后,它便稳定且不会改变。
  • 数据仓库的数据反映的是一段相当长的时间内历史数据的内容,数据仓库的用户对数据的操作大多是数据查询或比较复杂的挖掘,一旦数据进入数据仓库以后,一般情况下被较长时间保留。
  • 数据仓库中一般由大量的查询操作,但修改和删除操作很少。

时变性(Time-Variant)

  • 数据仓库包含各种粒度的历史数据,数据可能与某个特定日期、星期、月份、季度或者年份有关。
  • 当业务变化后十渠时效性。因此数据仓库的数据需要随着时间更新,以适应决策的需要。
  • 从这个角度讲,数据仓库建设是一个项目,更是一个过程。

数仓主流开发语言——SQL介绍

数仓开发语言概述

  • 数仓作为面相分析的数据平台,其主职工作就是对存储在其中的数据开展分析,那么如何读取数据分析呢?
  • 理论上来说,任何一款编程语言只要具备读写数据、处理数据的能力,都可以用于数仓的开发。比如大家耳熟能详的C、java、Python等;
  • 关键在于编程语言是否易学、好用、功能是否强大。遗憾的是上面所列出的C、python等编程语言都需要一定的时间进行语法的学习,并且学习语法之后还需要结合分析的业务场景进行编码,跑通业务逻辑。
  • 不管从学习成本还是开发效率来说,上述所说的编程语言都不是十分友好的。
  • 在数据分析领域,不得不提的就是SQL编程语言,应该称之为分析领域主流开发语言。

SQL语言介绍

  • 结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存储数据以及查询、更新和管理数据。
  • SQL语言是我们有能力访问数据库,并且SQL是一种ANSI(美国国家标准化组织)的标准计算机语言,各大数据库厂商在生产数据库软件的时候,几乎都会去支持SQL的语法,以使得用户在使用软件时更加容易上手,以及在不通厂商软件之间进行切换更加适应,因为大家的SQL语法都差不多
  • SQL语言功能很强,十分简洁,核心功能只用了9个动词。语法接近英语口语,索引,用户很容易学习和使用。

数仓与SQL

  • 虽然SQL语言本身是针对数据库软件设计的,但是在数据仓库领域,尤其是大数据仓库领域,很多数仓软件都会去支持SQL语法
  • 原因在于一是用户学习SQL成本低,二是SQL语言对于数据分析真的十分友好,爱不释手。

结构化数据

  • 结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格的遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。
  • 与结构化数据相对的是不适用于数据库二维表来表现的非结构化数据,包括所有格式的办公文档、XML、HTML、各类报表、图片和音频、视频信息等。
  • 通俗来说,结构化数据会有严格的行列对其,便于解读与理解。

SQL语法分类

SQL主要语法分为两个部分:数据定义语言(DDL)和数据操作语言(DML)。

  • DDL语法使我们有能力创建或删除表,以及数据库、索引等各种对象,但是不涉及表中具体数据操作。
  • DML语法使我们有能力针对表中的数据进行插入、更新、删除、查询操作。

Apache Hive软件介绍与Hadoop关系

什么是Hive

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

为什么使用Hive

  • 使用Hadoop MapReduce直接处理数据所面临的问题
    人员学习成本太高 需要掌握java语言
    MapReduce实现复杂查询逻辑开发难度太大
  • 使用Hive处理数据的好处
    操作接口采用类SQL语法,提供快速开发的能力(简单、易上手)
    避免直接写MapReduce,减少开发人员的学习成本
    支持自定义函数,功能扩展很方便
    背靠Hadoop,擅长存储分析海量数据集

Hive和Hadoop关系

  • 从功能来说没时间仓库软件,至少需要具备下述两种能力:
    存储数据的能力、分析数据的能力
  • Apache Hive作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。只不过Hive并不是自己实现了上述两种能力,而是借助Hadoop。
    Hive利用HDFS存储数据,利用MapReduce查询分析数据。
  • 这样突然发现Hive没什么用,不过是套壳Hadoop罢了。其实不然,Hive的最大魅力在于用户专注于编写HQL,Hive帮你转换成为MapReduce程序完成对数据的分析。

场景设计——Hive功能模拟实现底层猜想

如何模拟实现Apache Hive的功能

在HDFS文件系统上有一个文件,路径为/data/china_user.txt;
需求:统计来自于上海年龄大于25岁的用户有多少个?
1,zhangsan,18,beijing
2,lisi,25,shanghai
3,allen,30,shanghai
4,wangwu,15,nanjing
5,james,45,huangzhou
6,tony,26,beijing

场景目的

  • 重点理解下面两点:
    Hive能将数据文件映射成一张表,这个映射是指什么?
    Hive软件本身到底承担了什么功能职责?

映射信息记录

  • 映射在数学上称之为一种对应关系,比如y==x+1,对于每一个x的值都有与之对应的y值。
  • 在hive中能够写sql处理的前提是针对表,而不是文件,因此需要交文件和表之间的对应关系描述记录清楚。映射信息专业的叫法称之为元数据信息(元数据是指用来描述数据的数据metadata)。
  • 具体来看,要记录的元数据信息包括:
    表对应着哪个文件(位置信息)
    表的列对应着文件哪一个字段(顺序信息)
    文件字段之间的分隔符是什么

SQL语法解析、编译

  • 用户写完SQL之后,Hive需要针对上sql进行语法校验,并且根据记录的元数据信息解读SQL背后的含义,指定执行计划。
  • 并且把执行计划转换成MapReduce程序来具体执行,把执行的结果封装返回给用户。

对Hive的理解

  • Hive能将数据文件映射成一张表,这个映射是指什么?
    文件和表之间的对应关系
  • Hive软件本身到底承担了什么功能职责?
    SQL语法机械编译成为MapReduce

最终效果

  • 基于上述分析,最终想要模拟实现的Hive的功能大致需要下图组件参与其中。
  • 从中可以感受一下Hive承担了什么职责,当然,也可以把这个理解为Hive的架构图

在这里插入图片描述

Apache hive——各组件功能

Hive组件

  • 用户接口
    包括CLI、JDBC/ODBC、WebGUI。其中,CLI(commmand line interface)为shell命令;Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。
  • 元数据存储
    通常是存储在关系数据库如mysql/derby中。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
  • Driver驱动程序,包括语法解析器、优化器、计划编译器、执行器
    完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有执行引擎调用执行。
  • 执行引擎
    Hive本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive支持MapReduce、Tez、Spark3种执行引擎。

Apache hive安装部署——metadata与metastore、远程模式介绍

什么是元数据

  • 元数据(metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

Hive Metadata

  • Hive Metadata即Hive的元数据。
  • 包含用Hive创建的database、table、表的位置、类型、属性,字段顺序类型等元信息。
  • 元数据存储在关系型数据库中。如hive内置的Derby、或者第三方如MySQL等。

Hive Metastore

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

Metastore配置方式

  • Metastore服务配置有3种模式:内嵌模式、本地模式、远程模式。
  • 区分3中配置方式的关键是弄清楚两个问题:
    Metastore服务是否需要单独配置、单独启动?
    Metastore是存储在内置的Derby中,还是第三方RDBMS,比如MySQL。
  • 本系列课程中使用企业推荐模式——远程模式部署。
内嵌模式本地模式远程模式
Metastore单独配置、启动
metadata存储介质DerbyMySQLMySQL

Metastore远程模式

  • 在生产环境中,建议用远程模式来配置Hive Metastore。在这种情况下,其他依赖hive的软件都可以通过Metastore访问hive。由于还可以完全屏蔽数据库层,因此这也带来了更好的可管理性/安全性。

Apache hive安装部署–与Hadoop整合、MySQL安装

安装前准备

  • 由于Apache Hive是一款基于Hadoop的数据仓库软件,通常部署运行在Linux系统之上。因此不管使用何种方式配置Hive Metastore,必须要先保证服务器的基础环境正常,Hadoop集群健康可用。
  • 服务器基础环境
    集群时间同步、防火墙关闭、主机Host映射、免密登录、JDK安装
  • Hadoop集群健康可用
    启动Hive之前必须先启动Hadoop集群。特别要注意,需要等待HDFS安全模式关闭之后再启动运行Hive。
    Hive不是分布式安装运行的软件,其分布式的特性主要借由Hadoop完成。包括分布式存储、分布式计算。

Hadoop与Hive整合

  • 因为Hive需要把数据存储在HDFS上,并且通过MapReduce作为执行引擎处理数据;
  • 因此需要在Hadoop中添加相关配置属性,以满足Hive在Hadoop上运行。
  • 修改Hadoop中core-site.xml,并且Hadoop集群同步配置文件,重启生效。
<!-整合hive ->
<property><name>hadoop.proxyuser.root.hosts</name><value>*</value>
</property>
<property><name>hadoop.proxyuser.root.groups</name><value>*</value>
</property>

step1:MySQL安装

### Hive3安装-----#### Mysql安装- 卸载Centos7自带的mariadb```shell[root@node3 ~]# rpm -qa|grep mariadbmariadb-libs-5.5.64-1.el7.x86_64[root@node3 ~]# rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps[root@node3 ~]# rpm -qa|grep mariadb                            [root@node3 ~]# 
  • 安装mysql

    mkdir /export/software/mysql#上传mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar 到上述文件夹下  解压
    tar xvf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar#执行安装
    yum -y install libaio[root@node3 mysql]# rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm mysql-community-libs-5.7.29-1.el7.x86_64.rpm mysql-community-client-5.7.29-1.el7.x86_64.rpm mysql-community-server-5.7.29-1.el7.x86_64.rpm warning: mysql-community-common-5.7.29-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
    Preparing...                          ################################# [100%]
    Updating / installing...1:mysql-community-common-5.7.29-1.e################################# [ 25%]2:mysql-community-libs-5.7.29-1.el7################################# [ 50%]3:mysql-community-client-5.7.29-1.e################################# [ 75%]4:mysql-community-server-5.7.29-1.e################                  ( 49%)
    
  • mysql初始化设置

    #初始化
    mysqld --initialize#更改所属组
    chown mysql:mysql /var/lib/mysql -R#启动mysql
    systemctl start mysqld.service#查看生成的临时root密码
    cat  /var/log/mysqld.log[Note] A temporary password is generated for root@localhost: o+TU+KDOm004
    
  • 修改root密码 授权远程访问 设置开机自启动

    [root@node2 ~]# mysql -u root -p
    Enter password:     #这里输入在日志中生成的临时密码
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 3
    Server version: 5.7.29Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> #更新root密码  设置为hadoop
    mysql> alter user user() identified by "hadoop";
    Query OK, 0 rows affected (0.00 sec)#授权
    mysql> use mysql;mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'hadoop' WITH GRANT OPTION;mysql> FLUSH PRIVILEGES; #mysql的启动和关闭 状态查看 (这几个命令必须记住)
    systemctl stop mysqld
    systemctl status mysqld
    systemctl start mysqld#建议设置为开机自启动服务
    [root@node2 ~]# systemctl enable  mysqld                             
    Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.#查看是否已经设置自启动成功
    [root@node2 ~]# systemctl list-unit-files | grep mysqld
    mysqld.service                                enabled 
    
  • Centos7 干净卸载mysql 5.7

    #关闭mysql服务
    systemctl stop mysqld.service#查找安装mysql的rpm包
    [root@node3 ~]# rpm -qa | grep -i mysql      
    mysql-community-libs-5.7.29-1.el7.x86_64
    mysql-community-common-5.7.29-1.el7.x86_64
    mysql-community-client-5.7.29-1.el7.x86_64
    mysql-community-server-5.7.29-1.el7.x86_64#卸载
    [root@node3 ~]# yum remove mysql-community-libs-5.7.29-1.el7.x86_64 mysql-community-common-5.7.29-1.el7.x86_64 mysql-community-client-5.7.29-1.el7.x86_64 mysql-community-server-5.7.29-1.el7.x86_64#查看是否卸载干净
    rpm -qa | grep -i mysql#查找mysql相关目录 删除
    [root@node1 ~]# find / -name mysql
    /var/lib/mysql
    /var/lib/mysql/mysql
    /usr/share/mysql[root@node1 ~]# rm -rf /var/lib/mysql
    [root@node1 ~]# rm -rf /var/lib/mysql/mysql
    [root@node1 ~]# rm -rf /usr/share/mysql#删除默认配置 日志
    rm -rf /etc/my.cnf 
    rm -rf /var/log/mysqld.log
    

Apache hive安装部署–配置文件修改编辑

step2:上传解压Hive安装包(node1安装即可)

  • 上传安装包 解压

    tar zxvf apache-hive-3.1.2-bin.tar.gz
    
  • 解决Hive与Hadoop之间guava版本差异

    cd /export/server/apache-hive-3.1.2-bin/
    rm -rf lib/guava-19.0.jar
    cp /export/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
    
  • 修改配置文件

    • hive-env.sh

      cd /export/server/apache-hive-3.1.2-bin/conf
      mv hive-env.sh.template hive-env.shvim hive-env.sh
      export HADOOP_HOME=/export/server/hadoop-3.3.0
      export HIVE_CONF_DIR=/export/server/apache-hive-3.1.2-bin/conf
      export HIVE_AUX_JARS_PATH=/export/server/apache-hive-3.1.2-bin/lib
      
    • hive-site.xml

      vim hive-site.xml
      
      <configuration>
      <!-- 存储元数据mysql相关配置 -->
      <property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://node1:3306/hive3?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
      </property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value>
      </property><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value>
      </property><property><name>javax.jdo.option.ConnectionPassword</name><value>hadoop</value>
      </property><!-- H2S运行绑定host -->
      <property><name>hive.server2.thrift.bind.host</name><value>node1</value>
      </property><!-- 远程模式部署metastore metastore地址 -->
      <property><name>hive.metastore.uris</name><value>thrift://node1:9083</value>
      </property><!-- 关闭元数据存储授权  --> 
      <property><name>hive.metastore.event.db.notification.api.auth</name><value>false</value>
      </property>
      </configuration>
  • 上传mysql jdbc驱动到hive安装包lib下

    mysql-connector-java-5.1.32.jar
    
  • 初始化元数据

    cd /export/server/apache-hive-3.1.2-bin/bin/schematool -initSchema -dbType mysql -verbos
    #初始化成功会在mysql中创建74张表
    
  • 在hdfs创建hive存储目录(如存在则不用操作)

    hadoop fs -mkdir /tmp
    hadoop fs -mkdir -p /user/hive/warehouse
    hadoop fs -chmod g+w /tmp
    hadoop fs -chmod g+w /user/hive/warehouse
    

Apache hive安装部署 – metastore服务启动方式

Metastore服务启动方式

  1. 前台启动,进程会一直占据终端,ctrl+c结束进程,服务关闭。可以根据需求添加参数开启debug日志,获取详细日志信息,便于排错。
  2. 后台启动,输出日志信息在/root目录下nohup.out
  • 启动hive

    • 1、启动metastore服务

      #前台启动  关闭ctrl+c
      /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore#前台启动开启debug日志
      

    /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore --hiveconf hive.root.logger=DEBUG,console

    #后台启动 进程挂起 关闭使用jps+ kill -9
    nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore &

    
    

Apache hive --新老客户端使用与hiveserver2服务

  1. hive自带客户端
  • bin/hive、bin/beeline

HiveServer2服务介绍

  • 远程模式下beeline通过Thrift连接到单独的HiveServer2服务上,这也是官方推荐在生产环境中使用的模式。
  • HiveServer2支持多客户端的兵法和身份认证,旨在为开放API客户端如JDBC、ODBC提供更好的支持。

关系梳理

  • HiveServer2通过Metastore服务读写元数据。所以在远程模式下,启动HiveServer2之前必须首先启动Metastore服务。
  • 特别注意:远程模式下,Beeline客户端只能通过HiveServer2服务访问Hive。而bin/hive是通过Metastore服务访问的。

bin/beeline客户端使用

  • 在hive安装的服务器上,首先启动Metastore服务,然后

  • 2、启动hiveserver2服务

      nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 &#注意 启动hiveserver2需要一定的时间  不要启动之后立即beeline连接 可能连接不上
    
  • 3、beeline客户端连接

    • 拷贝node1安装包到beeline客户端机器上(node3)

      scp -r /export/server/apache-hive-3.1.2-bin/ node3:/export/server/
      
    • 错误

      Error: Could not open client transport with JDBC Uri: jdbc:hive2://node1:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate root (state=08S01,code=0)
      
      • 修改

        在hadoop的配置文件core-site.xml中添加如下属性:
        <property><name>hadoop.proxyuser.root.hosts</name><value>*</value>
        </property>
        
      hadoop.proxyuser.root.groups * ```
      • 连接访问

        /export/server/apache-hive-3.1.2-bin/bin/beelinebeeline> ! connect jdbc:hive2://node1:10000
        beeline> root
        beeline> 直接回车
        
  • 错误解决:Hive3执行insert插入操作 statstask异常

    • 现象

      在执行insert + values操作的时候  虽然最终执行成功,结果正确。但是在执行日志中会出现如下的错误信息。
      

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cXkBc0UE-1661569579125)(Hive3安装.assets/image-20201109144915808.png)]

    • 开启hiveserver2执行日志。查看详细信息

      2020-11-09 00:37:48,963 WARN  [5ce14c58-6b36-476a-bab8-89cba7dd1706 main] metastore.RetryingMetaStoreClient: MetaStoreClient lost connection. Attempting to reconnect (1 of 1) after 1s. setPartitionColumnStatisticsERROR [5ce14c58-6b36-476a-bab8-89cba7dd1706 main] exec.StatsTask: Failed to run stats task
      

相关文章:

Hive数据仓库

数据仓库概念与起源发展由来 数仓概念 数据仓库&#xff08;英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW&#xff09;&#xff0c;是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面相分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持…...

公网访问的Linux CentOS本地Web站点搭建指南

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道&#xff0c;指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 前言 在web项目中,部署的web站点需要被外部访问,则…...

ChatGPT:人机交互新境界,AI智能引领未来

一、ChatGPT&#xff1a;智能交流的新标杆 ChatGPT是基于GPT技术的最新版本&#xff0c;拥有深度学习模型的基因。它通过在大量数据上进行预训练&#xff0c;可以理解和生成自然语言&#xff0c;从而实现了与人类更加自然流畅的对话和交流。 二、ChatGPT的技术背景和工作原理 …...

微信小程序值相同的数据,一个数据setDate修改后,另一个值相同的数据也会修改

在js中一个基础类型可以直接赋值&#xff0c;引用类型直接赋值会指向同一个值&#xff08;原理是浅拷贝和深拷贝&#xff09; 解决问题代码&#xff1a;JSON.parse(JSON.stringify(json)) ↓ let json {0: [false, false],1: [true, false] } this.setData({timeList: JSON.…...

Spring5学习笔记 — IOC

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; Spring专栏 ✨特色专栏&a…...

DevOps自动化平台开发之 Shell脚本执行的封装

基础知识 基于如下技术栈开发DevOps平台 Spring Boot Shell Ansible Git Gitlab Docker K8S Vue 1、spring boot starter的封装使用 2、Shell脚本的编写 3、Ansible 脚本的编写 4、Docker 的使用与封装设计 本篇介绍如何使用Java封装Linux命令和Shell脚本的使用 将其设计成…...

STM32CubeIDE(I2C)

目录 一、IIC轮询模式 1.1 配置 1.2 编写AHT20驱动 1.2.1 aht20.h 1.2.2 aht20.c 二、I2C中断 2.1 打开中断 2.2 分离读取流程 2.3 在主函数中重新编写读取流程 2.4 在i2c.c中重新定义stm32f1xx_hal_i2c.h中的两个函数 三、I2CDMA 3.1 配置DMA通道 3.2 代码的修改 一…...

http 请求报文响应报文的格式以及Token cookie session 区别

面试必备 http 请求报文响应报文的格式Token cookie session 区别 http 请求报文响应报文的格式 HTTP 请求报文和响应报文的格式如下&#xff1a; HTTP 请求报文格式&#xff1a; <方法> <路径> <协议版本> <请求头部字段1>: <值1> <请求头…...

智能汽车的主动悬架工作原理详述

摘要&#xff1a; 本文将详细介绍主动悬架功能原理设计。 主动悬架是车辆上的一种汽车悬架。它使用车载系统来控制车轮相对于底盘或车身的垂直运动&#xff0c;而不是由大弹簧提供的被动悬架&#xff0c;后者的运动完全由路面决定。主动悬架分为两类&#xff1a;真正的主动悬架…...

vue2和vue3的一些技术点复习

二、vue2 1、vue2对已有组件二次封装&#xff0c;例如fes2 input 组件&#xff08;文档链接&#xff09; 子组件 <template><div class"keyboard-page"><wb-input:id"keyBoardId":placeholder"placeholder" :type"type&q…...

安装nvm 切换node版本

1. 安装 nvm curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash 验证nvm安装完成 command -v nvm 如果安装完成&#xff0c;就会显示如下 nvm 2. 查看 nvm 可以安装的 node 版本 查看可以安装的版本 nvm ls-remote 查看所有可以安装的…...

【html中的BFC是什么】

BFC&#xff08;块级格式化上下文&#xff09;是 CSS 中的一种盒模型布局&#xff0c;是指一个独立的块级容器&#xff0c;容器内部的元素会按照一定规则进行布局。 BFC 具体的规则有以下几个&#xff1a; BFC 内部的元素在垂直方向上相互排列&#xff0c;不会出现浮动的情况。…...

苹果账号被禁用怎么办

转载&#xff1a;苹果账号被禁用怎么办 目录 禁用的原因 解除Apple ID禁用 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UKQ1ILhC-1689932607373)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw)]​编辑 …...

跨境出海企业,如何防范恶意退货欺诈

很多出海企业遭遇到过恶意退货事件。 2021年&#xff0c;某跨境商家在海外电商平台运营超过13年。有一次&#xff0c;有个海外买家买了一台二手的数码摄像机。在买家收到货后&#xff0c;却声称商品备在使用了45分钟之后便自动关机&#xff0c;且不能继续充电。该商家很肯定产…...

数据出境要依法“过安检”!什么是数据出境?

为了规范数据出境活动&#xff0c;保护个人信息权益&#xff0c;维护国家安全和社会公共利益&#xff0c;促进数据跨境安全、自由流动。从2022年9月1日起&#xff0c;《数据出境安全评估办法》施行。什么是数据出境&#xff0c;什么情况下需要进行数据出境安全评估呢&#xff1…...

ARM——点灯实验

循环点灯 RCC寄存器使能GPIOE、GPIOF组寄存器 修改GPIOx组寄存器下的值 通过GPIOx_MODER寄存器设置为输出模式通过GPIOx_OTYOER寄存器设置为推挽输出类型通过GPIOx_OSPEEDR寄存器设置为低速输出通过GPIOx_PUPDR寄存器设置为禁止上下拉电阻点灯 通过GPIOx_ODR寄存器设置为高电…...

Kubernetes 使用 helm 部署 NFS Provisioner

文章目录 1. 介绍2. 预备条件3. 部署 nfs4. 部署 NFS subdir external provisioner4.1 集群配置 containerd 代理4.2 配置代理堡垒机通过 kubeconfig 部署 部署 MinIO添加仓库修改可配置项 访问nodepotingress 1. 介绍 NFS subdir external provisioner 使用现有且已配置的NFS…...

Istio Pilot源码学习(二):ServiceController服务发现

本文基于Istio 1.18.0版本进行源码学习 4、服务发现&#xff1a;ServiceController ServiceController是服务发现的核心模块&#xff0c;主要功能是监听底层平台的服务注册中心&#xff0c;将平台服务模型转换成Istio服务模型并缓存&#xff1b;同时根据服务的变化&#xff0c…...

Spring框架中的ResourcePatternResolver只能指定jar包内文件,指定容器中文件路径报错:FileNotFoundException

原始代码&#xff1a; public static <T> T getFromFile(String specifiedFile, String defaultClasspathFile, Class<T> expectedClass) {try {ResourcePatternResolver resolver new PathMatchingResourcePatternResolver();Resource[] resources resolver.ge…...

pytorch工具——认识pytorch

目录 pytorch的基本元素操作创建一个没有初始化的矩阵创建一个有初始化的矩阵创建一个全0矩阵并可指定数据元素类型为long直接通过数据创建张量通过已有的一个张量创建相同尺寸的新张量利用randn_like方法得到相同尺寸张量&#xff0c;并且采用随机初始化的方法为其赋值采用.si…...

解决Jmeter响应内容显示乱码

一、问题描述 jmeter在执行接口请求后&#xff0c;返回的响应体里面出现乱码现象&#xff0c;尽管在调了对应请求的响应编码也无用&#xff0c;现找到解决办法。 二、解决办法 进入到jmeter的bin目录下&#xff0c;找到jmeter.properties&#xff0c;通过按ctrlF快速定位查找到…...

ChatGPT和搜索引擎哪个更好用

目录 ChatGPT和搜索引擎的概念 ChatGPT和搜索引擎的作用 ChatGPT的作用 搜索引擎的作用 ChatGPT和搜索引擎哪个更好用 总结 ChatGPT和搜索引擎的概念 ChatGPT是一种基于对话的人工智能技术&#xff0c;而搜索引擎则是一种用于在互联网上查找和检索信息的工具。它们各自具…...

Nginx 301 https跳转后出现跨域和混合内容问题 —— 筑梦之路

问题 在浏览器地址栏敲入url访问静态资源目录时&#xff0c;发现默认跳转到了http协议的地址 如上图所示&#xff0c;客户端https请求先到达API网关&#xff0c;然后网关将请求通过http协议转发到静态资源服务器。 调出浏览器发现客户端发送的https请求收到了一个301状态码的响…...

记录--关于前端的音频可视化-Web Audio

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 背景 最近听音乐的时候&#xff0c;看到各种动效&#xff0c;突然好奇这些音频数据是如何获取并展示出来的&#xff0c;于是花了几天功夫去研究相关的内容&#xff0c;这里只是给大家一些代码实例&…...

docker-compose yml配置、常用命令

下载完docker-compose后&#xff0c;如果想使用docker-compose命令开头&#xff0c;需要创建软连接 sudo ln -s /usr/local/lib/docker/cli-plugins/docker-compose /usr/bin/docker-compose 1.docker-compose.yml文件编排 一个 docker-compose.yml 文件的顶层元素有&#xff…...

【实战】 七、Hook,路由,与 URL 状态管理(下) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十三)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...

【MySQL】_5.MySQL的联合查询

目录 1. 笛卡尔积 2. 内连接 2.1 示例1&#xff1a;查询许仙同学的成绩 2.2 示例2&#xff1a; 查询所有同学的总成绩&#xff0c;及同学的个人信息 2.3 示例3&#xff1a;查询所有同学的科目及各科成绩&#xff0c;及同学的个人信息 3. 外连接 3.1 情况一&#xff1a;两…...

【后端面经】微服务构架 (1-3) | 熔断:熔断-恢复-熔断-恢复,抖来抖去怎么办?

文章目录 一、前置知识1、什么是熔断?2、什么是限流?3、什么是降级?4、怎么判断微服务出现了问题?A、指标有哪些?B、阈值如何选择?C、超过阈值之后,要不要持续一段时间才触发熔断?5、服务恢复正常二、面试环节1、面试准备2、面试基本思路三、总结 在微服务构架中…...

对UITextField输入内容的各种限制-总结

使用代理方法来限制输入框中的字数&#xff0c;输入的符号&#xff0c;输入的数字大小等各种限制 限制输入字数 已经有小数点了&#xff0c;就不能继续输入小数点 不能输入以0为开头的内容 不能输入以.为开头的内容 小数点后只允许输入一位数 只能输入100以下的数值 **不能包括…...

【图论】二分图

二分图&#xff0c;即可以将图中的所有顶点分层两个点集&#xff0c;每个点集内部没有边 判定图为二分图的充要条件&#xff1a;有向连通图不含奇数环 1、染色法 可以解决二分图判断的问题 步骤与基本思路 遍历图中每一个点&#xff0c;若该点未被染色&#xff0c;则遍历该…...