Hadoop集群搭建

news2025/7/20 17:09:20

Hadoop集群搭建

Hadoop集群简介

  • Hadoop集群包括两个集群: HDFS集群、YARN集群
  • 两个集群逻辑上分离、通常物理上在一起
  • 两个集群都是标准的主从架构集群
  1. HDFS集群(分布式存储)

    主角色:NameNode
    从角色:DataNode
    主角色辅助角色:SecondaryNameNode

  2. YARN集群(资源管理、调度)

    主角色:ResourceManager
    从角色:NodeManager

如何理解两个集群逻辑上分离

两个集群互相之间没有依赖、互不影响

如何理解两个集群物理上在一起

某些角色进程往往部署在同一台物理服务器上

为什么没有MapReduce集群?

MapReduce是计算框架、代码层面的组件,没有集群一说

在这里插入图片描述

Hadoop部署模式

  • 单机模式

    一个机器运行1个Java进程,所有角色在一个进程中运行,主要用于调试

  • 伪分布式

    一个机器运行多个进程,每个角色一个进程,主要用于调试

  • 集群模式

    集群模式主要用于生产环境部署。会使用N台主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会分开部署不同的机器上。

  • HA高可用

    在集群模式的基础上为单点故障部署备份角色,形成主备架构,实现容错。

Hadoop源码编译

  • 安装包、源码包下载地址
  • 为什么要重新编译Hadoop源码
    匹配不同操作系统本地库环境,Hadoop某些操作比如压缩、IO需要调用系统本地库(.so|.dll)修改源码、重构源码
  • 如何编译Hadoop
    源码包根目录下文件: BUILDING.txt

编译Hadoop3.2.4

  • 编译环境:Centos7

  • 依赖版本:

    • cmake: 3.24.3
    • snappy: 1.1.3
    • JDK: 1.8u341
    • maven: 3.8.6
    • protobuf: 3.19.6
  • 编译源码版本:Hadoop3.2.4-src

统一工作目录

mkdir -p /export/server/    # 软件安装路径
mkdir -p /export/data/      # 数据存储路径
mkdir -p /export/software/  # 安装包存放路径

创建安装目录

mkdir -p /export/server
cd /export/server

将之前下载的所有依赖放在当前目录/export/server

安装编译依赖

yum install gcc gcc-c++ make autoconf automake libtool curl lzo-devel zlib-devel openssl openssl-devel ncurses-devel snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop libXtst zlib -y

yum install -y doxygen cyrus-sasl* saslwrapper-devel*

之所以没有使用yum安装cmake、snappy、maven、protobuf,是因为yum中的版本太低,无法正常编译Hadoop,所以某些依赖需要手动安装合适的版本。

安装cmake

tar -zxvf cmake-3.24.3.tar.gz
cd cmake-3.24.3
./configure
make && make install

验证

[root@node1 ~]# cmake -version
cmake version 3.24.3

CMake suite maintained and supported by Kitware (kitware.com/cmake).

安装snappy

卸载之前安装的

rm -rf /usr/local/lib/libsnappy*
rm -rf /lib64/libsnappy*

上传解压

tar -zxvf snappy-1.1.3.tar.gz

编译安装

cd /export/server/snappy-1.1.3
./configure
make && make install

验证安装

[root@node1 ~]# ls -lh /usr/local/lib |grep snappy
-rw-r--r--. 1 root root 511K 1116 23:17 libsnappy.a
-rwxr-xr-x. 1 root root  955 1116 23:17 libsnappy.la
lrwxrwxrwx. 1 root root   18 1116 23:17 libsnappy.so -> libsnappy.so.1.3.0
lrwxrwxrwx. 1 root root   18 1116 23:17 libsnappy.so.1 -> libsnappy.so.1.3.0
-rwxr-xr-x. 1 root root 253K 1116 23:17 libsnappy.so.1.3.0

安装配置JDK 1.8

解压安装包

tar -zxvf jdk-8u341-linux-x64.tar.gz

配置环境变量

vim ~/.bash_profile

在文件末加上以下内容

export JAVA_HOME=/export/server/jdk1.8.0_341
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/libdt.jar:$JAVA_HOME/lib/tools.jar

加载环境变量

source ~/.bash_profile

验证是否安装成功

[root@node1 server]# java -version
java version "1.8.0_341"
Java(TM) SE Runtime Environment (build 1.8.0_341-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)

安装配置maven

解压安装包

tar -zxvf apache-maven-3.8.6-bin.tar.gz

配置环境变量

vim ~/.bash_profile

.bash_profile文件末添加以下内容

export MAVEN_HOME=/export/server/apache-maven-3.8.6
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=:$MAVEN_HOME/bin:$PATH

加载环境变量

source ~/.bash_profile

验证

[root@node1 server]# mvn -v
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: /export/server/apache-maven-3.8.6
Java version: 1.8.0_341, vendor: Oracle Corporation, runtime: /export/server/jdk1.8.0_341/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"

添加maven阿里云镜像仓库,提高编译速度

vim /export/server/apache-maven-3.8.6/conf/settings.xml

在xml的mirrors标签内添加以下内容

 <mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
 </mirror>

安装Protobuf3.19.6

解压

tar -zxvf protobuf-all-3.19.6.tar.gz

编译安装

cd /export/server/protobuf-3.19.6
./autogen.sh
./configure
make && make install

验证

[root@node1 protobuf-3.19.6]# protoc --version
libprotoc 3.19.6

编译Hadoop

解压

tar -zxvf hadoop-3.2.4-src.tar.gz

编译

cd /export/server/hadoop-3.2.4-src
mvn clean package -Pdist,native -DskipTests -Dtar -Dbundle.snappy -Dsnappy.lib=/usr/local/lib

参数说明
Pdist,native :把重新编译生成的hadoop动态库;
DskipTests :跳过测试
Dtar :最后把文件以tar打包
Dbundle.snappy :添加snappy压缩支持【默认官网下载的是不支持的】
Dsnappy.lib=/usr/local/lib :指snappy在编译机器上安装后的库路径

集群部署Hadoop3.2.4

集群角色规划

服务器运行角色
node1.vbox.cnnamenode datenode resourcemanager nodemanager
node2.vbox.cnsecondarynamenode datanode nodemanager
node3.vbox.cndatenode nodemanager

服务器基础环境准备

  1. 创建三台虚拟机

    通过Oracle VM VirtualBox创建3台Centos7虚拟机

    修改hostname(三台机器都需要修改)

    [root@node1 ~]# vim /etc/hostname 
    [root@node1 ~]# cat /etc/hostname 
    node1.vbox.cn
    
  2. 修改Hosts映射

    vim /etc/hosts
    
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.2.29    node1   node1.vbox.cn
    192.168.2.30    node2   node2.vbox.cn
    192.168.2.31    node3   node3.vbox.cn
    

    三台机器都需要修改

  3. 关闭防火墙

    关闭防火墙
    禁止防火墙自启

        systemctl stop firewalld
        systemctl disable firewalld        
    

    三台机器都需要操作

  4. ssh免密登录

    node1

    ssh-keygen -t rsa -C "node1@example.com"
    

    node2

    ssh-keygen -t rsa -C "node2@example.com"
    

    node3

    ssh-keygen -t rsa -C "node3@example.com"
    

    复制ssh到其他主机

    ssh-copy-id node1
    ssh-copy-id node2
    ssh-copy-id node3
    

    至少需要完成从node1 -> node1,node2,node3的免密登录

  5. 集群时间同步

    yum -y install ntpdate
    ntpdate ntp4.aliyun.com
    

    每台机器都进行时间同步

  6. JDK1.8安装

    cd /export/server
    tar -zxvf jdk-8u341-linux-x64.tar.gz
    scp -r jdk1.8.0_341 node2:/export/server/
    scp -r jdk1.8.0_341 node2:/export/server/
    

    在每台机器的~/.bash_profile都设置环境变量

    export JAVA_HOME=/export/server/jdk1.8.0_341
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/libdt.jar:$JAVA_HOME/lib/tools.jar
    
  7. 上传、解压Hadoop3.2.4安装包

    上传之前编译好了的Hadoop3.2.4到node1,并解压。

    tar -zxvf hadoop-3.2.4.tar.gz -C /export/server/
    
  8. hadoop目录结构

    目录说明
    binHadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop。
    etcHadoop配置文件所在的目录
    include对外提供的编程库文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。
    lib该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用。
    libexec各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。
    sbinHadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动、关闭脚本
    shareHadoop各个模块编译后的jar包所在目录,官方自带示例
  9. 编辑Hadoop配置文件

    • hadoop-env.sh

      cd /export/server/hadoop-3.2.4/etc/hadoop/
      vim hadoop-env.sh
      

      在文件末尾加上以下内容

      # 配置JAVA_HOME
      export JAVA_HOME=/export/server/jdk1.8.0_341
      
      # 设置用户以执行对应角色shell命令
      export HDFS_NAMENODE_USER=root
      export HDFS_DATANODE_USER=root
      export HDFS_SECONDARYNAMENODE_USER=root
      export YARN_RESOURCEMANAGER_USER=root
      export YARN_NODEMANAGER_USER=root   
      
    • core-site.xml

      cd /export/server/hadoop-3.2.4/etc/hadoop/
      vim core-site.xml
      

      在configuration标签中添加以下内容

      <!-- 默认文件系统的名称。通过URI中schema区分不同文件系统 -->
      <!-- file://本地文件系统 hdfs://hadoop分布式文件系统 -->
      <!-- gfs://google文件系统 -->
      <!-- hdfs文件系统访问地址:http://node1.vbox.cn:8020 -->
      <property>
          <name>fs.defaultFS</name>
          <value>hdfs://node1.vbox.cn:8020</value>
      </property>
      
      <!-- 设置Hadoop本地保存数据路径 -->
      <property>
          <name>hadoop.tmp.dir</name>
          <value>/export/data/hadoop-3.2.4</value>
      </property>
      
      <!-- 设置HDFS web UI用户身份 -->
      <property>
          <name>hadoop.http.staticuser.user</name>
          <value>root</value>
      </property>
      
    • hdfs-site.xml

      cd /export/server/hadoop-3.2.4/etc/hadoop/
      vim hdfs-site.xml
      

      在configuration标签中添加以下内容

      <!-- 设置SNN进程运行机器位置信息 -->
      <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>node2.vbox.cn:9868</value>
      </property>
      
    • mapred-site.xml

      cd /export/server/hadoop-3.2.4/etc/hadoop/
      vim mapred-site.xml
      

      在configuration标签中添加以下内容

      <!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
      <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
      </property>
      
      <!-- MR程序历史服务地址 -->
      <property>
      <name>mapreduce.jobhistory.address</name>
      <value>node1.vbox.cn:10020</value>
      </property>
      
      <!-- MR程序历史服务器web端地址 -->
      <property>
      <name>mapreduce.jobhistory.webapp.address</name>
      <value>node1.vbox.cn:19888</value>
      </property>
      
      <property>
      <name>yarn.app.mapreduce.am.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
      </property>
      
      <property>
      <name>mapreduce.map.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
      </property>
      
      <property>
      <name>mapreduce.reduce.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
      </property>
      
    • yarn-site.xml

      cd /export/server/hadoop-3.2.4/etc/hadoop/
      vim yarn-site.xml
      

      在configuration标签中添加以下内容

      <!-- 设置YARN集群主角色运行机器位置 -->
      <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>node1.vbox.cn</value>
      </property>
      
      <!-- ModeManager上运行的附属服务,需配置成mapreduce_shuffle才可运行程序。 -->
      <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
      </property>
      
      <!-- 每个容器请求的最小内存资源(MB为单位) -->
      <property>
          <name>yarn.scheduler.minimum-allocation-mb</name>
          <value>256</value>
      </property>
      
      <!-- 每个容器请求的最大内存资源(MB为单位) -->
      <property>
          <name>yarn.scheduler.maximum-allocation-mb</name>
          <value>512</value>
      </property>
      
    • workers

      cd /export/server/hadoop-3.2.4/etc/hadoop/
      vim workers
      

      workers文件中添加主机名称或IP

      node1.vbox.cn
      node2.vbox.cn
      node3.vbox.cn
      
  10. 分发同步安装包

    在node1机器上将Hadoop安装包scp同步到其他机器上

    cd /export/server/
    scp -r hadoop-3.2.4 node2:/export/server/
    scp -r hadoop-3.2.4 node3:/export/server/
    
    
  11. 配置Hadoop环境变量

    在node1上配置Hadoop环境变量

    vim ~/.bash_profile
    export HADOOP_HOME=/export/server/hadoop-3.2.4
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    

    再其他三台机器执行同样的操作并加载环境变量

    source ~/.bash_profile
    

    验证

    [root@node1 hadoop]# hadoop version
    Hadoop 3.2.4
    Source code repository Unknown -r Unknown
    Compiled by root on 2022-11-17T10:35Z
    Compiled with protoc 2.5.0
    From source with checksum ee031c16fe785bbb35252c749418712
    This command was run using /export/server/hadoop-3.2.4/share/hadoop/common/hadoop-common-3.2.4.jar
    
  12. NameNode format(格式化操作)

    首次启动HDFS时,必须对其进行格式化操作

    format本质上是初始化工作,进行HDFS清理和准备工作

    hdfs namenode -format
    

    当格式化日志中出现以下内容说明格式化成功

在这里插入图片描述

  1. Hadoop集群启动关闭-手动逐个进程启停

    每台机器上每次手动启动关闭一个角色进程

    • HDFS集群

      hdfs --daemon start namenode|datanode|secondarynamenode
      hdfs --daemon stop namenode|datanode|secondarynamenode
      
    • YARN集群

      yarn --daemon start resourcemanager|nodemanager
      yarn --daemon stop resourcemanager|nodemanager
      

    在node1中启动

    hdfs --daemon start namenode
    hdfs --daemon start datanode
    yarn --daemon start resourcemanager
    yarn --daemon start nodemanager
    jps
    
    [root@node1 hadoop-3.2.4]# hdfs --daemon start namenode
    [root@node1 hadoop-3.2.4]# hdfs --daemon start datanode
    [root@node1 hadoop-3.2.4]# yarn --daemon start resourcemanager
    [root@node1 hadoop-3.2.4]# yarn --daemon start nodemanager
    [root@node1 hadoop-3.2.4]# jps
    2066 NameNode
    2163 DataNode
    2260 ResourceManager
    2516 NodeManager
    2605 Jps
    
    

    在node2中启动

    hdfs --daemon start datanode
    hdfs --daemon stop secondarynamenode
    yarn --daemon start nodemanager
    jps
    
    [root@node2 ~]# hdfs --daemon start datanode
    [root@node2 ~]# hdfs --daemon stop secondarynamenode
    [root@node2 ~]# yarn --daemon start nodemanager
    [root@node2 ~]# jps
    2451 Jps
    2340 NodeManager
    2262 SecondaryNameNode
    2157 DataNode
    

    在node3中启动

    hdfs --daemon start datanode
    yarn --daemon start nodemanager
    jps
    
    [root@node3 ~]# hdfs --daemon start datanode
    [root@node3 ~]# yarn --daemon start nodemanager
    [root@node3 ~]# jps
    1605 NodeManager
    1690 Jps
    1518 DataNode
    
  2. Hadoop集群启动关闭-shell脚本一键启停

    在node1上,使用自带的shell脚本一键启动

    前提:配置好机器之间的SSH免密登录和workers文件。

    • HDFS集群

      start-dfs.sh

      stop-dfs.sh

    • YARN集群

      start-yarn.sh

      stop-yarn.sh

    • Hadoop集群

      start-all.sh
      stop-all.sh

Hadoop Web UI页面-HDFS集群

地址:http://node1.vbox.cn:9870

其中node1.vbox.cn是namenode运行所在集群的主机名或者IP
如果使用主机名访问,得修改Windows中的hosts文件

在这里插入图片描述

Hadoop Web UI页面-YARN集群

地址:http://node1.vbox.cn:8088

其中node1.vbox.cn是resourcemanager运行所在机器的主机名或者IP
如果使用主机名访问,得修改Windows中的hosts文件

在这里插入图片描述

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

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

相关文章

理学知识01-ppm、ppb、ppt换算

1. 浓度 浓度是分析化学中的一个名词。含义是以1升溶液中所含溶质的摩尔数表示的浓度。以单位体积里所含溶质的物质的量&#xff08;摩尔数&#xff09;来表示溶液组成的物理量&#xff0c;叫作该溶质的摩尔浓度&#xff0c;又称该溶质物质的量浓度。 2. 浓度单位 在文献阅读过…

关于支付宝授权用户信息

最近做的一个项目授权支付宝信息 进行报名支付 以下是流程 1、一个首先引进阿里相关配置信息 2、因为我这边项目是支持 小程序、H5、支付宝 登录 报名的&#xff0c;我这边只展示支付宝代码哦 对啦 微信不同应用下 unionid 是一样的&#xff0c;所以可以将小程序/H5下的视…

UE引擎的UWorld是什么,UWorld与GWorld的关系

UE引擎的UWorld是什么&#xff0c;UWorld与GWorld的关系 UWorld有一些关于游戏的重要信息&#xff0c;比如&#xff08;PersistentLevel&#xff0c;NetDriver&#xff0c;GameState&#xff09;&#xff0c;没有它&#xff0c;你不能做你想做的大部分事情。 GWorld是个全局指…

m无线通信的调制解调过程的matlab仿真,包括ASK,FSK,PSK

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 传输模拟信号时一样&#xff0c;传输数字信号时也有三种基本的调制方式&#xff1a;幅移键控(ASK)、频移键控(FSK)和相移键控(PSK)。它们分别对应于用载波&#xff08;正弦波&#xff09…

react-router-dom v6的几个方法

Router是React-Router导航命令的传递者,作为React应用的顶层组件,为应用提供组件化的路由响应能力,如果没有引入Router组件,那么任何路由调整都不会生效。根据接收外部的history对象的不同来提供不同的功能: 如果接收的是browserHistory,得到的BrowserRouter,叫做浏览器…

Linux之Shell编程快速上手

Shell编程快速上手一、Shell编程基础1.1 Shell脚本程序1.2 创建Shell脚本二、Shell的语法2.1Shell的变量2.2 设置环境变量2.3 位置参数变量2.4预定义变量一、Shell编程基础 在linux系统中&#xff0c;shell不仅能够执行命令(启动、挂起、停止甚至编写一些程序)&#xff0c;还可…

工业无线呼叫安灯(Andon)系统上线须知

在很多现代化生产制造企业内&#xff0c;工业无线呼叫安灯&#xff08;Andon&#xff09;系统是一个非常重要的管理系统。安灯系统本质上是发现问题及时将问题传递给相关人员&#xff0c;将问题阻止在最初的地方并及时解决问题。安灯系统是一种提高制造质量和生产效率的最有效手…

重建恐龙化石,摄影测量在古生物学中有怎样的意义?

一直以来&#xff0c;恐龙都是很多人喜欢的对象&#xff0c;各种恐龙主题的影视作品也是层出不穷&#xff0c;特别是《侏罗纪公园》系列电影&#xff0c;将恐龙推上了电影明星的位置。各种收藏恐龙巨型化石的博物馆也相当受欢迎。 随着三维重建的普及&#xff0c;建模打印和恐龙…

http请求和响应格式说明,http的get和post请求方式说明,http的请求体body的几种数据格式

HTTP内容说明 请求报文 一个HTTP请求报文由请求行&#xff08;request line&#xff09;、请求头部&#xff08;header&#xff09;、空行和请求数据4个部分组成&#xff0c; 请求报文的一般格式 &#xff1c;request-line&#xff1e; &#xff1c;headers&#xff1e; &am…

Firefly RK3399 PC pro开发板资料

一. 基本介绍 产品介绍&#xff1a;Firefly | 让科技更简单&#xff0c;让生活更智能开发板规格书&#xff1a;https://download.t-firefly.com/product/Board/RK3399/Document/Hardware/ROC-RK3399-PC%20Pro/Specification/ROC-RK3399-PC%20Pro%20%E4%BA%A7%E5%93%81%E8%A7%84…

AES实现接口的安全性

文章目录Maven项目结构图引入依赖AESUtilsEnDecryptUtilEncryptPropertiesEncryptAutoConfigurationspring.factories打成jar包&#xff0c;供其他项目 / 人使用打成jar 包导入 jar 包测试application.yamlUser类HelloController 测试代码地址&#xff1a; 链接&#xff1a;htt…

深入理解java虚拟机:类文件结构(1)

文章目录1. 概述2. Class类文件的结构2.1 魔数与Class文件的版本2.2 常量池2.3 访问标志2.4 类索引、父类索引与接口索引集合2.5 字段表集合1. 概述 如果计算机的CPU指令集就只有x86一种&#xff0c;操作系统就只有Windows一种&#xff0c;那也许就不会有Java语言的出现。Java…

云原生:容器与微服务

目录 一、虚拟化与容器 1.1 虚拟机 1.2 容器 1.3 Docker 1.4 Docker代码示例 二、微服务 2.1 微服务的概念 2.2 微服务的特点 三、为什么使用微服务 3.1 微服务的优缺点 3.2 云原生的支持服务 云原生技术使组织能够在新式动态环境&#xff08;如公有云、私有云和混…

攻防世界-pwnCTFM-Off_By_one漏洞与Tcachebin绕过

攻防世界-pwnCTFM-Off_By_one漏洞与Tcachebin绕过 保护机制 healerhealer-virtual-machine:~/Desktop/pwnCTFM/attachments$ checksec pwn [*] /home/healer/Desktop/pwnCTFM/attachments/pwnArch: amd64-64-littleRELRO: Full RELROStack: Canary foundNX: …

线性判别分析(机器学习)

目录 线性判别分析的原理 LDA的降维过程如下 线性判别分析&#xff08;LDA&#xff09; 是一种有监督的线性降维算法。 与PCA不同&#xff0c;LDA是为了使降维后的数据点尽可能地容易被区分 线性判别分析的原理 线性判别分析是对于给定的训练集&#xff0c;设法将样本投影到…

基于HTML+CSS+JavaScript+Bootstarp响应式健身网站(web前端期末大作业)

网站题目> &#x1f3c0;校园篮球网页设计、⚽足球体育运动、&#x1f93d;体育游泳运动、&#x1f3d3;兵乓球 、&#x1f3be;网球、等网站的设计与制作。 二、✍️网站描述> &#x1f3f7;️ 大学生校园运动静态HTML网页设计作品&#xff0c;采用DIV CSS布局制作&am…

数据结构体进阶链表【带头双向循环链表,单向链表的优化,从根部解决了顺序表的缺点】一文带你深入理解链表

前言&#xff1a; 对于链表&#xff0c;上一篇的单链表解决了顺序表的一部分缺陷&#xff0c;但并没有彻底的解决顺序表的问题&#xff0c;比如在进行单链表尾插尾删的时候还是需要进行遍历找尾&#xff0c;并没有达到全部的O(1)&#xff0c;并且在头插的时候还要分情况来考虑&…

【ASM】字节码操作 工具类与常用类 AdviceAdapter 介绍 打印方法进入 和 方法退出 的参数

文章目录 1.概述2. AdviceAdapter类2.1 class info2.2 fields2.3 constructors2. 4 methods2.案例2.1 打印方法参数3.总结1.概述 在上一篇文章:【ASM】字节码操作 工具类与常用类 Printer、ASMifier、Textifier 介绍 我们简单的介绍了 Printer、ASMifier、Textifier 三个类的…

idea2021版本创建一个javaweb项目(含额外知识--添加tomcat相关jar包)

前言&#xff1a; 建立一个javaweb项目需要用到JDK、idea、Tomcat 1. JDK是11版本的 2.IDEA是2021版本的 3.Tomcat是8.5版本的 这些下载在我的其他文章里面也有讲到下载和应用&#xff0c;大致都是殊途同归的 一、打开ided&#xff0c;按照以下步骤点击创建一个工程项目…

X11 Xlib截屏代码所遇问题及初步分析

综合了两篇博客中的例程并做一定修改&#xff0c;得到了基于X11 Xlib的截屏代码。 两篇博客链接分别如下&#xff1a; X11 截图与鼠标事件-SkyMei777-ChinaUnix博客 xlib实现截图报错-编程语言-CSDN问答 C代码如下&#xff1a; #include <stdio.h> #include <std…