[Hadoop]数据仓库基础与Apache Hive入门

news2024/10/6 6:48:17

目录

         大数据导论与Linux基础

Apache Hadoop、HDFS

大数据导论与Linux基础

数据仓库基本概念

数据仓库概念

数据仓库主要特征

数据仓库主流开发语言--SQL

Apache Hive入门

Apache Hive概述

场景设计:如何模拟实现Hive功能

Apache Hive架构、组件

Apache Hive安装部署

Apache Hive元数据

Hive3安装

Apache Hive客户端使用

Hive SQL 语言


数据仓库基本概念

数据仓库概念

  • 数据仓库(简称DW、数仓),是一个用于存储、分析、报告的数据系统

  • 数据仓库本身并不“生产”任何数据,其数据来源于不同外部系统

  • 同时数据仓库自身也不需要“消费”任何的数据,其结果开放给各个外部应用使用

  • 这也是为什么叫“仓库”,而不叫“工厂”的原因

  • 数据仓库是为了分析数据而来,分析结果给企业决策提供支撑

数据仓库主要特征

  • 面向主题:主题是一个抽象概念,是较高层次上数据综合、归类并进行分析利用的抽象

  • 集成性:主题相关的数据通常分布在多个操作系统中,彼此分散、独立、异构,因此再数据进入数仓之前,必须要经过统一与综合,对数据进行抽取、清理、转换和汇总

  • 非易失性、非易变性:

    • 数仓是分析数据的平台,而不是创造数据的平台。我们通过数仓去分析数据中的规律,而不是去创造修改其中的规律。因此数据进入数仓之后,它便稳定且不会改变

    • 数仓的数据反应的是一段相当长的时间内历史数据的内容,数仓的用户对数据的操作大多是数据查询或比较复杂的挖掘,一旦数据进入数仓之后,一般情况下被较长时间保留

    • 数仓一般有大量的查询操作,但修改和删除操作很少

  • 时变性:数据仓库的数据需要随着时间更新,以适应决策的需要

数据仓库主流开发语言--SQL

  • 结构化查询语言(简称SQL),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理数据

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

  • 结构化数据与非结构化数据

 

  • SQL语法分类:

    • 数据定义语言(DDL),使我们有能力创建或删除表,以及数据库、索引等各种对象,但是不涉及表中具体数据操作:

      CREATE DATABASE - 创建新数据库
      CREATE TABLE - 创建新表

    • 数据操纵语言(DML),针对表中的数据进行增删改查:

      SELECT - 从数据库表中获取数据
      UPDATE - 更新数据库表中的数据
      DELETE - 从数据库表中删除数据
      INSERT - 向数据库表中插入数据

Apache Hive入门

Apache Hive概述

什么是Hive

  • Hive是一款建立在Hadoop之上的开源的数仓系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问存储在Hadoop文件中的大型数据集

  • Hive核心是将HQL转化为MapReduce程序,然后将程序提交到Hadoop集群执行

为什么使用Hive

  • 使用MapReduce直接处理数据所面临的问题

    • 人员学习成本太高,需要掌握

    • MapReduce实现复杂查询逻辑开发难度太大

  • 使用Hive处理数据的好处

    • 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)

    • 避免直接写MapReduce,减少开发人员的学习成本

    • 支持自定义函数,功能扩展很方便

    • 背靠Hadoop,擅长存储分析海量数据集

Hive和Hadoop关系

  • Hive利用HDFS存储数据,利用MapReduce查询分析数据

场景设计:如何模拟实现Hive功能

  • Hive能将数据文件映射成为一张表,这个映射是什么?

    • 映射信息专业的叫法称之为元数据信息,它包含:

      • 表对应着哪个文件(位置信息)

      • 表的列对应着文件哪一个字段(顺序信息)

      • 文件字段之间的分隔符是什么

  • Hive软件本身到底承担了什么功能职责?

    • SQL语法校验、解析、编译成为MapReduce

  • 最终效果

Apache Hive架构、组件

Apache Hive安装部署

Apache Hive元数据

  • 元数据是描述数据的数据,主要是描述数据属性的信息

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

  • 元数据存储在关系型数据库中。如hive内置的Derby或者第三方如MySQL等

  • Hive Metastore即元数据服务。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接matestore服务,由metastore再去连接MySQL数据库来存取元数据

  • metastore服务配置有3张模式:内嵌模式、本地模式、远程模式

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

Hive3安装


安装前准备

  • 服务器基础环境:集群时间同步、防火墙关闭、主机Host映射、免密登录、JDK安装

  • Hadoop集群健康可用:启动Hive之前必须先启动Hadoop集群。特别要注意,需等待HDFS安全模式关闭之后再启动运行Hive

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

Mysql安装

  • 卸载Centos7自带的mariadb

    [root@node3 ~]# rpm -qa|grep mariadb
    mariadb-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.29
    ​
    Copyright (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 
    ​
    #退出mysql登陆
    Ctrl+d

  • 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


Hive的安装

  • 上传安装包到/export/server 解压

    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.sh
      ​
      vim 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

  • ==启动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通过Metastore服务读写元数据。所以在远程模式下,启动HiveServer2之前必须先启动metastore服务

  • 远程模式下,Beeline客户端只能通过HiveServer2服务访问Hive。而bin/hive是通过Metastore服务访问的

bin/beeline客户端使用

  • 在hive安装的服务器上(node1),首先启动metastore服务,然后启动hiveserver2服务

nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore &
nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 &
  • 在node3上使用beeline客户端进行连接访问。需要注意hiveserver2服务启动之后需要稍等一会才可以对外提供服务

    • 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>
          <property>
                  <name>hadoop.proxyuser.root.groups</name>
                  <value>*</value>
          </property>

        • 连接访问

          /export/server/apache-hive-3.1.2-bin/bin/beeline
          ​
          beeline> ! connect jdbc:hive2://node1:10000
          beeline> root
          beeline> 直接回车

Hive SQL 语言

  • 在Hive中,默认的数据库叫做default,存储数据位位于HDFS的/user/hive/warehouse下

  • 用户自己创建的数据库存储位置是/user/hive/warehouse/database_name.db下

  • Hive最常用的数据类型是string和int

  • 分隔符指定语法

    • row format delimited 语法用于指定字段之间等相关的分隔符,这样Hive才能正确的读取解析数据

    • Hive建表时如果没有 row format语法指定分隔符,则采用默认分隔符'\001',使用ASCII编码的值,键盘是打不出来的

    • 在vim中,连续按下Ctrl+v/Ctril+a即可输入'\001',显示^A

    • 在一些文本编辑器上以SOH的形式显示

练习

--创建数据库并切换使用
create database if not exists itheima;
use itheima;
--ddl create table
create table t_archer(
id int comment "ID",
name string comment "英雄名称",
hp_max int comment "最大生命",
mp_max int comment "最大法力",
attack_max int comment "最高物攻",
defense_max int comment "最大物防",
attack_range string comment "攻击范围",
role_main string comment "主要定位",
role_assist string comment "次要定位"
) comment "王者荣耀射手信息"
row format delimited
fields terminated by "\t";

建表成功之后,在Hive的默认存储路径下就生成了表对应的文件夹,将archer.txt文件上传到对应的文件夹下。

#在node机器上进行操作
cd ~
mkdir hivedata
cd hivedata/
#把文件从课程资料中首先上传到node1 linux系统上
#执行命令把文件上传到HDFS表所对应的目录下
hadoop fs -put archer.txt /user/hive/warehouse/itheima.db/t_archer

结果验证

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

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

相关文章

Python实现ACO蚁群优化算法优化卷积神经网络分类模型(CNN分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

深入理解 go sync.Waitgroup

本文基于 Go 1.19。 go 里面的 WaitGroup 是非常常见的一种并发控制方式&#xff0c;它可以让我们的代码等待一组 goroutine 的结束。 比如在主协程中等待几个子协程去做一些耗时的操作&#xff0c;如发起几个 HTTP 请求&#xff0c;然后等待它们的结果。 WaitGroup 示例 下面…

CH32V3xx USART 空闲中断+DMA接收

目录 1、CH32V3xx USART简介2、测试程序2.1 USART 初始化配置2.1 发送函数2.1 接收中断1、CH32V3xx USART简介 CH32V3xx系列MCU包含3个同步异步收发器(USART1、2、3)和5个通用异步收发器(UART4、5、6、7、8)。USART模块支持DMA功能,DMA可以实现快速连续收发。使用DMA发送时…

windows安装pcl

文章目录 vcpkg方式安装默认安装x86默认没安装cloud_viewer.h AllInOne安装pcl的官方例程 vcpkg方式安装 官方建议在windows下&#xff0c;采用vcpkg的方式来安装&#xff1a; 安装vcpkg的&#xff0c;可以看这里&#xff1a;【WIN安装vcpkg】 默认安装x86 要注意的是 vcpkg…

品牌线上推广:如何进行电商控价?

随着电商平台的迅速崛起&#xff0c;电商控价已经成为了一个十分重要的话题。所谓电商控价&#xff0c;是指在电子商务平台上&#xff0c;品牌方针对自己的产品进行价格的控制&#xff0c;以确保产品的售价不被平台和第三方商家恶意砍价而影响品牌形象和盈利。那么&#xff0c;…

iptables 防火墙(二)SNAT/DNAT

目录 一&#xff1a;SNAT原理与应用 1.SNAT介绍 2.SNAT 应用环境 3.SNAT原理 二&#xff1a;SNAT配置 第一步&#xff1a;设置各个端口的网卡 1.先准备客户机、web服务器、网关服务器 2.网关服务器设置 &#xff08;1&#xff09;添加网卡 &#xff08;2&#xff09;修…

10分钟!Python写一个角色扮演带上下文功能的chatgpt聊天机器人!上篇!

大家都在网页上玩ChatGPT玩的不亦乐乎&#xff0c;但是很多时候我们需要打造个人专属的GPT&#xff0c;比如我是律师&#xff0c;我是医生&#xff0c;我是营养师&#xff0c;我是财会&#xff0c;我是猎头&#xff0c;我需要专属的某个领域的GPT&#xff0c;其实也不难。 今天…

加密解密软件VMProtect教程(八)许可制度之管理许可证

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

加密解密软件VMProtect入门使用教程(八)许可制度之许可系统功能

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

‘Light轻食初试版’小程序制作到发布过程中遇到的问题

目录 前言技术栈开发经验布局字体问题图片问题协作开发 发布时遇到的问题接口问题分包、图片显示问题小程序与公众号关于测试版本 总结 前言 学完小程序方面的知识后&#xff0c;我花四天时间做了一个简单的微信小程序——轻食Light说。这个小程序目前叫作“Light轻食说初始版…

【R模型】R语言线性回归之简单线性回归模型 (一)

&#x1f482; 个人信息&#xff1a;酷在前行&#x1f44d; 版权: 博文由【酷在前行】原创、需要转载请联系博主&#x1f440; 如果博文对您有帮助&#xff0c;欢迎点赞、关注、收藏 订阅专栏&#x1f516; 本文收录于【R模型】&#xff0c;该专栏主要介绍R语言各类型机器学习…

ORA-01555-快照过旧问题处理

背景 通过监控发现ETL报错 如何处理 ORA-01555 是 Oracle 数据库的一个错误代码&#xff0c;表示出现了“快照太旧”的错误。这个错误通常是由于数据库中的回滚段不够大&#xff0c;导致无法满足当前事务的需&#xff0c;从而导致事务回滚失败。 具体来说&#xff0c;ORA-0…

如何知道调用电商API是否成功返回数据?查看错误码解释

在API调用过程中&#xff0c;系统可能会返回一些错误码。错误码能够帮助开发者快速准确地了解出现的异常情况。错误码的含义通常涉及到请求参数不合法、认证失败、服务器内部错误等各种问题&#xff0c;它们提供了有关API调用失败的信息和上下文&#xff0c;在错误排查和修复时…

【案例教程】环境影响与碳排放生命周期评估应用及案例分析实践技术

生命周期分析是一种分析工具&#xff0c;它可帮助人们进行有关如何改变产品或如何设计替代产品方面的环境决策&#xff0c;即由更清洁的工艺制造更清洁的产品。例如&#xff0c;生命周期分析的结果表明&#xff0c;某种产品能耗低&#xff0c;寿命长&#xff0c;不含有毒化学物…

Java实现识别发票信息

Java实现调用第三方接口识别发票信息 需求&#xff1a;对每个发票图片文件进行重命名&#xff0c;名称为发票号固定信息&#xff0c;主要处理增值税发票 这里需要用到第三方接口&#xff0c;OCR识别功能&#xff0c;这里我用的是百度云接口&#xff0c;所以你需要注册百度云账…

计算机网络:计网体系结构

计网体系结构 1. 基本概念1.0 计算机网络的发展1.0.1 第一阶段1.0.2 第二阶段1.0.3 第三阶段 1.1 计算机网络的概念1.2 计算机网络的功能1.3 计算机网络的组成1.4 计算机网络的分类1.5 标准化工作及相关组织1.6 相关性能指标1.6.1 速率1.6.2 带宽1.6.3 吞吐量1.6.4 时延1.6.5 时…

springboot+vue摄影跟拍预定管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的摄影跟拍预定管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1…

SSM框架学习-Spring事务管理入门

文章目录 前言六、Spring事务1.Spring事务简介2.入门案例--模拟银行间转账业务3.开启Spring事务的一般步骤4.Spring事务角色5.spring事务属性--rollbackfor6.入门案例进阶--转账业务追加日志7. Spring事务属性--事务传播行为 总结 前言 为了巩固所学的知识&#xff0c;作者尝试…

项目管理:有效的沟通对项目的成功至关重要

为实施有效的沟通&#xff0c;需要建立沟通管理计划同时理解什么是沟通&#xff0c;沟通的对象是谁&#xff0c;沟通的目标是什么&#xff0c;难度在哪里&#xff0c;并选择合适的沟通方式。 项目沟通是确保项目团队的相关信息能及时、正确地产生、收集、发布、储存和最终处理…

77.建立一个Web应用程序的布局第一部分

本次我们需要设计的布局是这样样子&#xff0c;这个很想一个邮件系统的基本布局&#xff1b; ● 首先我们生成基础代码&#xff0c;基础代码很简单&#xff0c;不用过多解释 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-…