搭建Hadoop3.x完全分布式集群

news/2024/5/30 0:01:22/文章来源:https://blog.csdn.net/tangyi2008/article/details/136666852

零、资源准备

  • 虚拟机相关:
    • VMware workstation 16:虚拟机 > vmware_177981.zip
    • CentOS Stream 9:虚拟机 > CentOS-Stream-9-latest-x86_64-dvd1.iso
  • Hadoop相关
    • jdk1.8:JDK > jdk-8u261-linux-x64.tar.gz
    • Hadoop 3.3.6:Hadoop > Hadoop 3.3.6.tar.gz
  • 辅助工具
    • putty:tools > putty.exe
    • mtputty:tools > mtputty.exe
    • winscp:tools > WinSCP-6.3.1-Portable.zip

本文相关资源可以在文末提供的百度网盘资源中下载,除了vmware(你懂的…),以上资源均来源于官网,putty和winscp都是便捷式软件,无需安装

一、安装准备

1. 创建虚拟机

新建虚拟机

1) 选择典型安装

在这里插入图片描述

2)安装来源暂时不指定

在这里插入图片描述

3)操作系统选择Linux

在这里插入图片描述

4)设置虚拟机名称和位置

注意:位置可以根据自己电脑的使用情况,选择空闲更多的磁盘

设置虚拟机名称和位置

5)磁盘容量指定

磁盘容量指定

6)完成新建

在这里插入图片描述

7)虚拟机设置

注意:配置内存为2G,处理器2个,可根据电脑配置适当增加

虚拟机设置
在这里插入图片描述

2. 安装CentOS

1)设置CentOS映像文件

ISO映像选择下载的CentOS-Stream-9-xxxxxxx.iso

在这里插入图片描述

2)启动虚拟机

启动虚拟机

3)开始安装

选择Install CentOS Stream 9进行安装

在这里插入图片描述

4)语言选择English

在这里插入图片描述

5)安装前的配置

在这里插入图片描述

① 安装目的地

默认配置即可

在这里插入图片描述

② 软件选择

选择最小安装

在这里插入图片描述

③ 时区

区域选择Asia, 城市选择shanghai

在这里插入图片描述

④ 网络设置

确保网卡已经打开

设置主机名,也可以后续设置

在这里插入图片描述

⑤ 配置root用户密码

注意勾选Allow root SSH login with password,作为练习,密码可以设置简单点,比如123456

在这里插入图片描述

6)等待安装完成后重启系统。

在这里插入图片描述

7)配置虚拟机SSH远程登录

① 启动hadoop1

进入登录界面输入用户名root和密码,注意:密码输入时光标不会跳动

在这里插入图片描述

②配置虚拟机SSH远程登录

第一步,检查SSH服务是否安装和启动

在虚拟机中,分别执行rpm -qa | grep sshps -ef | grep sshd命令,查看当前虚拟机是否安装了SSH服务,以及SSH服务是否启动。

在这里插入图片描述

  • rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。

  • ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。

  • grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。该命令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

如果没有安装,可以使用以下命令进行安装

yum install  openssh-server openssh-clients

第二步,修改SSH服务配置文件

默认情况下,CentOS Stream 9不允许用户root进行远程登录,在虚拟机Hadoop2中执行vi /etc/ssh/sshd_config命令编辑配置文件sshd_config。

PermitRootLogin yes

在这里插入图片描述

对于小白,这里介绍下vi命令的简单使用方式:使用vi命令打开文件后,输入字母i进入插入模式 => 修改相应的文件内容 => 按Esc键进入命令行模式 => 输入:进入底行模式 => 输入x或者wq保存退出。

如果文件修改后不想保存,进行底行模式后输入q!进行不保存退出

第三步, 重启SSH服务

systemctl restart sshd

3. 克隆主机

1)关闭hadoop1

使用命令shutdown -h now关闭hadoop1

或者

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=images%2F在这里插入图片描述

2)克隆虚拟机

克隆虚拟机hadoop2、hadoop3,以克隆hadoop2为例

在这里插入图片描述

在这里插入图片描述
->在这里插入图片描述

在这里插入图片描述

  • 完整克隆的虚拟机是通过复制原虚拟机创建完全独立的新虚拟机,不和原虚拟机共享任何资源,可以脱离原虚拟机独立使用。

  • 链接克隆的虚拟机需要和原虚拟机共享同一个虚拟磁盘文件,不能脱离原虚拟机独立运行。

在这里插入图片描述

4. 网络设置

网络整体规划如下:

虚拟机名主机名IP
hadoop1hadoop1192.168.121.160
hadoop2hadoop2192.168.121.161
hadoop3hadoop3192.168.121.162

1)配置VMware Workstation网络

在VMware Workstation主界面,依次单击“编辑”→“虚拟网络编辑器…”选项,配置VMware Workstation网络。

在这里插入图片描述

2)配置静态IP

以hadoop1主机为例,类似配置hadoop2、 hadoop3

编辑配置文件

vi /etc/NetworkManager/system-connections/ens33.nmconnection

在这里插入图片描述

method=manual
address1=192.168.121.160/24,192.168.121.2
dns=114.114.114.114

修改uuid(只需要修改hadoop2、 hadoop3主机)

uuid的作用是使分布式系统中的所有元素都有唯一的标识码。

sed -i '/uuid=/c\uuid='`uuidgen`'' /etc/NetworkManager/system-connections/ens33.nmconnection

重启ens33网卡和重新加载网络配置文件

nmcli c reload
nmcli c up ens33

查看网络信息

ip a

在这里插入图片描述

检测网络

ping www.baidu.com

在这里插入图片描述

输入ctrl+c退出检测

3)主机名

配置hadoop2主机名

hostnamectl set-hostname hadoop2

配置hadoop3主机名

hostnamectl set-hostname hadoop3

4)配置虚拟机SSH远程登录

在这里插入图片描述

① 配置putty

在这里插入图片描述

② 配置winscp

在这里插入图片描述

5)修改映射文件

在虚拟机hadoop1主机执行vi /etc/hosts命令编辑映射文件hosts,在配置文件中添加如下内容。

192.168.121.160 hadoop1
192.168.121.161 hadoop2
192.168.121.162 hadoop3

在虚拟机hadoop1主机执行如下命令,拷贝配置到hadoop2, hadoop3

scp /etc/hosts root@hadoop2:/etc/hosts
scp /etc/hosts root@hadoop3:/etc/hosts

在这里插入图片描述

6) 关闭防火墙

关闭虚拟机Hadoop1、Hadoop2和Hadoop3的防火墙,分别在3台虚拟机中运行如下命令关闭防火墙并禁止防火墙开启启动。

  • 关闭防火墙systemctl stop firewalld

  • 禁止防火墙开机启动systemctl disable firewalld

5. 免密登录

在集群环境中,主节点需要频繁的访问从节点,以获取从节点的运行状态,主节点每次访问从节点时都需要通过输入密码的方式进行验证,确定密码输入正确后才建立连接,这会对集群运行的连续性造成不良影响,为主节点配置SSH免密登录功能,可以有效避免访问从节点时频繁输入密码。接下来,虚拟机hadoop1作为集群环境的主节点实现SSH免密登录。

SSH免密登录原理(原理:非对称加密算法:公钥加密(给别人)、私钥解密给自己)

在这里插入图片描述

1)生成密钥

在虚拟机hadoop1中执行ssh-keygen -t rsa命令,生成密钥。

在这里插入图片描述

查看秘钥文件

在虚拟机hadoop1中执行ll /root/.ssh命令查看密钥文件。

在这里插入图片描述

2)复制公钥文件

将虚拟机hadoop1生成的公钥文件复制到集群中相关联的所有虚拟机,实现通过虚拟机hadoop1可以免密登录虚拟机hadoop1、hdp3-2和hdp3-3。

ssh-copy-id hadoop1

在这里插入图片描述

ssh-copy-id hadoop2
ssh-copy-id hadoop3

3)测试免密登录

ssh hadoop1
ssh hadoop2
ssh hadoop3

在这里插入图片描述

6. 安装JDK

约定:软件安装包存放于/software,软件安装至/opt

1)创建目录

在虚拟机hadoop1中执行mkdir /software

2)上传jdk

利用winscp将jdk-8u261-linux-x64.tar.gz上传至hadoop1的/software目录

3)解压jdk

cd /software
ll
tar -xvf jdk-8u261-linux-x64.tar.gz -C /opt

4)配置JDK系统环境变量

在虚拟机hadoop1执行vi /etc/profile命令编辑环境变量文件profile,在该文件的底部添加配置JDK系统环境变量的内容。

export JAVA_HOME=/opt/jdk1.8.0_261
export PATH=$PATH:$JAVA_HOME/bin

记得执行source /etc/profile重新加载系统环境变量

5)验证jdk

java -version

在这里插入图片描述

6)同步文件

分发JDK安装目录和系统环境变量文件至hadoop2、hadoop3

scp -r  /opt/jdk* root@hadoop2:/opt
scp  /etc/profile root@hadoop2:/etcscp -r  /opt/jdk* root@hadoop3:/opt
scp  /etc/profile root@hadoop3:/etc

二、完全分布式部署

基于完全分布式模式部署Hadoop,需要将Hadoop中HDFS和YARN的相关服务运行在不同的计算机中,我们使用已经部署好的3台虚拟机Hadoop1、Hadoop2和Hadoop3。为了避免在使用过程中造成混淆,先规划HDFS和YARN的相关服务所运行的虚拟机。

虚拟机名主机名IP角色服务
hadoop1hadoop1192.168.121.160masterNameNode、ResourceManager
hadoop2hadoop2192.168.121.161workersSecondaryNameNode、DataNode、NodeManager
hadoop3hadoop3192.168.121.162workersDataNode、NodeManager

1. 安装Hadoop

1)解压

以解压方式安装Hadoop,将Hadoop安装到虚拟机Hadoop1的/opt目录。

tar -xvf /software/hadoop-3.3.6.tar.gz   -C /opt

2)配置环境变量

在Hadoop1执行vi /etc/profile命令配置系统环境变量,在该文件的底部添加如下内容。

export HADOOP_HOME=/opt/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

3)验证

在虚拟机Hadoop1的任意目录执行hadoop version命令查看当前虚拟机中Hadoop的版本号。

在这里插入图片描述

2. 修改配置文件

配置文件功能描述
hadoop-env.sh配置Hadoop运行时的环境,确保HDFS能够正常运行NameNode、SecondaryNameNode和DataNode服务
yarn-env.sh配置YARN运行时的环境,确保YARN能够正常运行ResourceManager和NodeManager服务
core-site.shHadoop核心配置文件
hdfs-site.xmlHDFS核心配置文件
mapred-site.xmlMapReduce核心配置文件
yarn-site.xmlYARN核心配置文件
workers控制从节点所运行的服务器

1)配置Hadoop运行时环境

在Hadoop安装目录/etc/hadoop/目录,执行vi hadoop-env.sh命令,在hadoop-env.sh文件的底部添加如下内容。

export JAVA_HOME=/opt/jdk1.8.0_261
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
  • 指定Hadoop使用的JDK

  • 指定管理NameNode、DataNode等服务的用户为root

2)配置hadoop

在Hadoop安装目录/etc/hadoop/目录,执行vi core-site.xml命令,在core-site.xml文件中添加如下内容。

<property><name>fs.defaultFS</name><value>hdfs://hadoop1:9000</value>
</property>
<property><name>hadoop.tmp.dir</name><value>/opt/data/hadoop-3.3.6</value>
</property>
<property><name>hadoop.http.staticuser.user</name><value>root</value>
</property>
<property><name>hadoop.proxyuser.root.hosts</name><value>*</value>
</property>
<property><name>hadoop.proxyuser.root.groups</name><value>*</value>
</property>
<property><name>fs.trash.interval</name><value>1440</value>
</property>

注意:

  • 上面的配置项要配置到<configuration>标签中,后面的配置项类似

配置项:

  • fs.defaultFS:指定HDFS的通信地址
  • hadoop.tmp.dir:指定Hadoop临时数据的存储目录
  • hadoop.http.staticuser.user:指定通过Web UI访问HDFS的用户root
  • hadoop.proxyuser.root.hosts:允许任何服务器的root用户可以向Hadoop提交任务
  • hadoop.proxyuser.root.groups:允许任何用户组的root用户可以向Hadoop提交任务
  • fs.trash.interval:指定HDFS中被删除文件的存活时长为1440秒

更多参数请参考官网:https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-common/core-default.xml

3)配置HDFS

在Hadoop安装目录/etc/hadoop/目录,执行vi hdfs-site.xml命令,在hdfs-site.xml文件中添加如下内容。

<property><name>dfs.replication</name><value>2</value>
</property>
<property><name>dfs.namenode.secondary.http-address</name><value>hadoop2:9868</value>
</property>

配置项:

  • dfs.replication:指定数据副本个数

  • dfs.namenode.secondary.http-address:指定SecondaryNameNode服务的通信地址

更多参数请参考官网:https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

4)配置MapReduce

在Hadoop安装目录/etc/hadoop/目录,执行vi mapred-site.xml命令,在mapred-site.xml文件中添加如下内容。

<property><name>mapreduce.framework.name</name><value>yarn</value>
</property>
<property><name>mapreduce.job.ubertask.enable</name><value>true</value>
</property>
<property><name>mapreduce.jobhistory.address</name><value>hadoop1:10020</value>
</property>
<property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop1: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>

配置项:

  • mapreduce.framework.name:MapReduce的执行模式,默认是本地模式,另外可以设置成classic(采用MapReduce1.0模式运行) 或 yarn(基于YARN框架运行).
  • mapreduce.job.ubertask.enable:是否允许开启uber模式,当开启后,小作业会在一个JVM上顺序运行,而不需要额外申请资源
  • mapreduce.jobhistory.address:指定MapReduce历史服务的通信地址
  • mapreduce.jobhistory.webapp.address:指定通过Web UI访问MapReduce历史服务的地址
  • yarn.app.mapreduce.am.env:指定MapReduce任务的运行环境
  • mapreduce.map.env:指定MapReduce任务中Map阶段的运行环境
  • mapreduce.reduce.env:指定MapReduce任务中Reduce阶段的运行环境

更多参数请参考官网:https://hadoop.apache.org/docs/r3.3.6/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

5)配置YARN

在Hadoop安装目录/etc/hadoop/目录,执行vi yarn-site.xml命令,在yarn-site.xml文件中添加如下内容。

<property><name>yarn.resourcemanager.hostname</name><value>hadoop1</value>
</property>
<property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value>
</property>
<property><name>yarn.nodemanager.pmem-check-enabled</name><value>false</value>
</property>
<property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value>
</property>
<property><name>yarn.log-aggregation-enable</name><value>true</value>
</property>
<property><name>yarn.log.server.url</name><value>http://hadoop1:19888/jobhistory/logs</value>
</property>
<property><name>yarn.log-aggregation.retain-seconds</name><value>604800</value>
</property>

配置项:

  • yarn.resourcemanager.hostname:指定ResourceManager服务运行的主机
  • yarn.nodemanager.aux-services:指定NodeManager运行的附属服务
  • yarn.nodemanager.pmem-check-enabled:指定是否启动检测每个任务使用的物理内存
  • yarn.nodemanager.vmem-check-enabled:指定是否启动检测每个任务使用的虚拟内存
  • yarn.log-aggregation-enable:指定是否开启日志聚合功能
  • yarn.log.server.url:指定日志聚合的服务器
  • yarn.log-aggregation.retain-seconds:指定日志聚合后日志保存的时间

更多参数请参考官网:https://hadoop.apache.org/docs/r3.3.6/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

6)配置workers

在虚拟机Hadoop1的/opt/hadoop-3.3.6/etc/hadoop/目录,执行vi workers命令,将workers文件默认的内容修改为如下内容。

hadoop2
hadoop3

3. 同步文件

使用scp命令将虚拟机Hadoop1的Hadoop安装目录分发至虚拟机Hadoop2和Hadoop3中存放安装程序的目录。

scp -r /opt/hadoop-3.3.6 root@hadoop2:/opt
scp -r /opt/hadoop-3.3.6 root@hadoop3:/optscp /etc/profile root@hadoop2:/etc
scp /etc/profile root@hadoop3:/etc

4. 格式化

  • 在基于伪分布式模式部署的Hadoop安装目录/opt/pdch/hadoop-3.3.6中,关闭基于伪分布式模式部署的Hadoop

  • 在虚拟机Hadoop1执行hdfs namenode -format命令,对基于完全分布式模式部署的Hadoop进行格式化HDFS文件系统的操作。

注意:格式化HDFS文件系统的操作只在初次启动Hadoop集群之前进行。

5. 启动

在虚拟机Hadoop1中执行命令启动Hadoop

start-dfs.sh
start-yarn.sh

6. 检测

1)jps查看进程

HDFS和YARN的相关服务运行在JVM进程中,可以执行jps命令查看当前虚拟机中运行的JVM进程。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)Web UI

① 在本地计算机的浏览器输入http://192.168.121.160:9870查看HDFS的运行状态。

在这里插入图片描述

② 在本地计算机的浏览器输入http://192.168.121.160:8088查看YARN的运行状态。

在这里插入图片描述

如果希望在本地计算机上使用 http://hadoop1:9870和http://hadoop1:8088查看Hadoop运行状态, 需要配置本机的hosts文件

C:\Windows\System32\drivers\etc\hosts, 添加如下内容即可

192.168.121.160 hadoop1
192.168.121.161 hadoop2
192.168.121.162 hadoop3

7. Hadoop启动服务总结

下面就Hadoop的服务启动进行简单的总结:

1)整体启动和关闭

start-all.sh
stop-all.sh

2)各个服务组件逐一启动/停止

(1)分别启动/停止HDFS组件

hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
hadoop-daemon.sh start secondarynamenode
hadoop-daemon.sh stop namenode
hadoop-daemon.sh stop datanode
hadoop-daemon.sh stop secondarynamenode

(2)分别启动/停止YARN组件

yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh stop nodemanager

3) 各个模块分开启动/停止

(1)整体启动/停止HDFS

start-dfs.sh
stop-dfs.sh

(2)整体启动/停止YARN

 start-yarn.sh stop-yarn.sh

8. 常见错误及解决办法

1)出现command not found错误

  • 检查/etc/profile文件中是否配置了正确的PATH

  • 如果/etc/profile设置正确,是否没有执行source /etc/profile 使环境变量生效

2)所有命令都不能运行

如果你发现不止安装的程序命令,就连原系统的内置命令都使用不了(比如lsvicat等),很明显,你在修改/etc/profile时,将PATH路径设置错了。最常见的是错误就是在设置PATH时,PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin,把$PATH:漏掉了,这就相当于现在的PATH路径只有两个值$HADOOP_HOME/bin$HADOOP_HOME/sbin

解决办法:

1)恢复默认的PATH路径:

export PATH=/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

2)使用vi命令修改/etc/profile文件,检查设置PATH的地方是否漏掉了$PATH:

3)不小心多次格式化

多次格式化导致DataNode 与 NameNode namespaceID不一致,导致启动HDFS失败,这里告诉最直接暴力的解决办法:

首先清空$hadoop.tmp.dir这个目录,以本文为例:

stop-all.sh
#本教程配置的hadoop.tmp.dir目录为/home/xiaobai/opt/hadoop/tmp
rm -fr /opt/data/hadoop-3.3.6

然后重新格式化HDFS即可

4)NameNode启动不成功

  • NameNode没有格式化

  • 环境变量配置错误

  • Ip和hostname绑定失败,需要通过ip a查看ip地址,重新配置/etc/hosts文件,设置正确的ip和hostname

  • hostname含有特殊符号如.(符号点),会被误解析

5)万能大法

一切的错误,最好的解决办法是查看日志

Hadoop的默认日志文件目录在$HADOOP_HOME/logs

三、案例——词频统计

WordCount示例是大数据计算里的”Hello World”, 它的功能是对输入文件的单词进行统计,输出每个单词的出现次数。

1. 准备数据

1)创建文本数据

在hadoop1上使用 vi /opt/data/word.txt命令编辑如下内容:

hello world
hello hadoop
hello hdfs
hello yarn

2)创建目录

在HDFS创建/wordcount/input目录,用于存放文件word.txt。

hdfs dfs -mkdir -p /wordcount/input

3)在虚拟机Hadoop1执行如下命令将文件word.txt上传到HDFS的/wordcount/input目录。

hdfs dfs -put /opt/data/word.txt /wordcount/input

4)查看文件是否上传成功

通过HDFS的Web UI查看文件word.txt是否上传成功。

在这里插入图片描述

2. 运行MapReduce程序

1)查看示例程序

进入虚拟机Hadoop1的/opt/hadoop-3.3.6/share/hadoop/mapreduce 目录,在该目录下执行“ll”命令,查看Hadoop提供的MapReduce程序。

在这里插入图片描述

2)执行程序

在MapReduce程序所在的目录执行下列命令,统计word.txt中每个单词出现的次数。

hadoop jar hadoop-mapreduce-examples-3.3.6.jar  wordcount /wordcount/input /wordcount/output
  • hadoop jar:用于指定运行的MapReduce程序;也可以使用yarn jar运行
  • wordcount:表示程序名称;
  • wordcount/input:表示文件word.txt所在目录;
  • wordcount/output:表示统计结果输出的目录

3)MapReduce程序部分运行效果。

在这里插入图片描述

3. 查看程序运行状态

MapReduce程序运行过程中,使用浏览器访问YARN的Web UI查看MapReduce程序的运行状态。

在这里插入图片描述

在HDFS的Web UI查看统计结果。

在这里插入图片描述

在这里插入图片描述

附、网盘资源

链接:https://pan.baidu.com/s/1MSUdwbPArIAglQTDRhOjrg?pwd=jiau
提取码:jiau

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

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

相关文章

17、设计模式之策略模式(Strategy)

一、什么是策略模式 策略模式属于行为型设计模式。定义了一系列算法&#xff0c;并将这些算法封装到一个类中&#xff0c;使得他们可以相互替换。这样&#xff0c;我们可以在改变某个对象使用的算法的情况下&#xff0c;选择一个合适的算法来处理特定的任务&#xff0c;主要解决…

全球首位AI软件工程师诞生,未来程序员会被取代吗?

今天早上看到一条消息&#xff0c;Cognition发布了世界首位AI程序员Devin&#xff0c;直接把我惊呆了&#xff0c;难道程序员是真要失业了吗&#xff1f; 全球首位AI软件工程师一亮相&#xff0c;直接引爆整个互联网圈。只需要一句指令&#xff0c;Devin就可以通过使用自己的s…

摄像机内存卡删除的视频如何恢复?恢复指南来袭

在现代社会&#xff0c;摄像机已成为记录生活、工作和学习的重要设备。然而&#xff0c;随着使用频率的增加&#xff0c;误删或意外丢失视频的情况也时有发生。面对这样的情况&#xff0c;许多用户可能会感到无助和困惑。那么&#xff0c;摄像机内存卡删除的视频真的无法恢复吗…

【05】消失的数字

hellohello~这里是土土数据结构学习笔记&#x1f973;&#x1f973; &#x1f4a5;个人主页&#xff1a;大耳朵土土垚的博客 &#x1f4a5;所属专栏&#xff1a;C语言函数实现 感谢大家的观看与支持&#x1f339;&#x1f339;&#x1f339; 有问题可以写在评论区或者私信我哦…

数据结构-链表(二)

1.两两交换列表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2…

ASP.NET排课实验室排课,生成班级课表实验室课表教师课表(vb.net)-214-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword214 要看成品演示 请联系客服发给您成品演示 课题&#xff1a;实验课排课系统 计算机 上机课 一周上5天课&#xff0c;周一到周五 一周上5天课&#xff0c;周一到周五 因为我排的是实验课&#xff0c;最好1&#xf…

GPT-4.5 Turbo意外曝光,最快明天发布?OpenAI终于要放大招了!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

Java基于微信小程序的童装商城

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【MySQL 系列】MySQL 索引篇

在 MySQL 中&#xff0c;索引是一种帮助存储引擎快速获取数据的数据结构&#xff0c;形象的说就是索引是数据的目录。它一般是以包含索引键值和一个指向索引键值对应数据记录物理地址的指针的节点的集合的清单的形式存在。通过使用索引&#xff0c; MySQL 可以在不需要扫描整个…

K-means算法(一篇文章讲透)

目录 一、引言 二、K-means算法的基本原理 三、优缺点 优点&#xff1a; 1 简单易懂 2 收敛速度快 3 聚类效果好 4 优化迭代功能 缺点&#xff1a; 1 对初始值敏感 2 局部最优问题 3 对非凸形状聚类效果不佳 4 易受噪声和异常值影响 5 K值难以确定 6 数据类型限…

OCR-free相关论文梳理

⚠️注意&#xff1a;暂未写完&#xff0c;持续更新中 引言 通用文档理解&#xff0c;是OCR任务的终极目标。现阶段的OCR各种垂类任务都是通用文档理解任务的子集。这感觉就像我们一下子做不到通用文档理解&#xff0c;退而求其次&#xff0c;先做各种垂类任务。 现阶段&…

Redis 哨兵集群如何实现高可用?(1)

目录 1.哨兵的介绍 2.哨兵的核心知识 3.Redis 哨兵主备切换的数据丢失问题 &#xff08;1&#xff09;异步复制导致的数据丢失 &#xff08;2&#xff09;脑裂导致的数据丢失 4.数据丢失问题的解决方案 &#xff08;1&#xff09;减少异步复制数据的丢失 &#xff08;2&…

6、设计模式之适配器模式(Adapter)

一、什么是适配器模式 适配器模式是一种结构型设计模式&#xff0c;它允许将不兼容的对象转换成可兼容的接口。主要目的是解决在不改变现有代码的情况下&#xff0c;使不兼容的接口之间能够正常工作&#xff0c;通过创建一个中间转换的适配器来将一个对象转换成我们所需要的接口…

地理数据 vs. 3D数据

在表示我们周围的物理世界时&#xff0c;地理空间数据和 3D 建筑数据是两个最常见的选择。 他们在各个行业和项目中发挥着至关重要的作用。 从构建数字孪生到可视化城市景观和创建沉浸式应用程序。 尽管地理空间和 3D 建筑数据有相似之处&#xff0c;但它们不可互换。 虽然地…

关于分布式微服务数据源加密配置以及取巧方案(含自定义加密配置)

文章目录 前言Spring Cloud 第一代1、创建config server项目并加入加解密key2、启动项目&#xff0c;进行数据加密3、实际项目中的测试server Spring Cloud Alibaba低版本架构不支持&#xff0c;取巧实现无加密配置&#xff0c;联调环境问题加密数据源配置原理探究自定义加密解…

Redis底层数据结构之Hash

文章目录 1. Redis底层hash编码格式2. Redis 6源码分析3. Redis 7源码分析 1. Redis底层hash编码格式 在redis6中hash的编码格式分别是ziplist&#xff08;压缩列表&#xff09;和hashtable&#xff0c;但在redis7中hash的编码格式变为了listpack&#xff08;紧凑列表&#xf…

Prometheus 系统监控

文章目录 1.Linux1.1.Node exporter1.2.安装部署 2.Windows2.1.windows_exporter2.2.安装部署 3.Docker3.1.cadvisor3.2.安装部署 4.Nginx4.1.nginx-vts-exporter4.2.安装部署 5.Redis5.1.redis_exporter5.2.安装部署 6.RabbitMQ6.1.rabbitmq_exporter6.2.安装部署 7.PostgreSQ…

三星泄露微软 Copilot 新功能:用自然语言操控各种功能

3 月 11 日消息&#xff0c;微软计划本月晚些时候发布新款 Surface 电脑和适用于 Windows 11 的 Copilot 新功能&#xff0c;但三星似乎等不及了&#xff0c;在其即将推出的 Galaxy Book4 系列产品宣传材料中泄露了一些即将到来的 Copilot 功能。 三星官网上发布的图片证实了此…

EasyExcel注解实现导出动态下拉框字符超出255

背景 项目需求要把某些用户数据通过下拉框的形式带出&#xff0c;供用户手动选择与自己相关的数据&#xff0c;从而实现excel的数据权限。由于字段有两个&#xff0c;后面可能更多&#xff0c;方便起见&#xff0c;使用自定义注解的形式&#xff0c;动态配置&#xff0c;并且动…

CSS 之 iconfont 字体图标的使用

iconfont 字体图标的常见使用场景&#xff1a; 如小米商城底部的导航栏 特点是&#xff1a;方便更改大小和颜色&#xff0c;可以使用字体的属性对其样式进行修改&#xff0c;从而更加轻易地实现图标和文字样式的同步修改。 第一步&#xff1a;在浏览器中搜索 https://www.i…