Hadoop 集群搭建

这篇具有很好参考价值的文章主要介绍了Hadoop 集群搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用三台虚拟机,搭建一个 Hadoop 集群。

目录

一、centos7 Minimal 版本安装配置

二、Hadoop 单节点安装

① 修改主机名和映射 hosts 文件

② 安装 JDK

③ 安装 Hadoop

 ④ 本地模式测试(官方WordCount)

 三、Hadoop 集群配置

(1)克隆 hadoop102、hadoop103

(2)群分发脚本xsync

(3)root 用户免密登录配置

(4)集群配置

1、集群部署规划

2、配置文件说明

3、配置集群

4、在集群上分发配置好的Hadoop配置文件

5、去 102 和 103 上查看文件分发情况

(5)群起集群

1、配置workers

2、启动集群

3、集群基本测试

(6)集群启动/停止方式总结 

1、各个模块分开启动/停止

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

(7)常用端口号说明


一、centos7 Minimal 版本安装配置

Centos7 Minimal 版本基本配置记录_centos7minimal_YuBooy的博客-CSDN博客

二、Hadoop 单节点安装

资料来源:(尚硅谷)尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优)_哔哩哔哩_bilibili

机器配置:(基础配置详看:Centos7 Minimal 版本基本安装配置)

主机名

hadoop101

hadoop102

hadoop103

IP

192.168.139.101

192.168.139.102

192.168.139.103

用户名

root

root

root

密码

123

123

123

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

先在 hadoop101 上配置:

① 修改主机名和映射 hosts 文件;

② 安装 JDK;安装 Hadoop 再克隆 hadoop102、hadoop103;

③ 克隆后再修改 hadoop102 、hadoop103 的主机名和 IP。


① 修改主机名和映射 hosts 文件

// 改主机名
hostnamectl set-hostname hadoop101

// 修改映射 hosts 文件
vim /etc/hosts
// 添加:
192.168.139.101 hadoop101
192.168.139.102 hadoop102
192.168.139.103 hadoop103   

reboot

修改windows的主机映射文件(hosts文件)

// C:\Windows\System32\drivers\etc 路径
// 添加:
192.168.139.101 hadoop101
192.168.139.102 hadoop102
192.168.139.103 hadoop103

② 安装 JDK

非 minimal 版本需要先卸载自带的 JDK;minimal 版本不需要。

1.把 jdk、hadoop 包放到 /etc/sofware 目录下

hadoop集群规划,大数据,环境配置,hadoop,大数据,hdfs

 2.安装

// 解压JDK到/opt/module目录下
[root@hadoop101 sofware]# tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module
/

// 配置JDK环境变量
// (1)新建/etc/profile.d/my_env.sh文件
vim /etc/profile.d/my_env.sh
// (2)添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
// (3)source一下/etc/profile文件,让新的环境变量PATH生效
source /etc/profile
// (4)测试JDK是否安装成功
java -version

③ 安装 Hadoop

Hadoop下载地址:Index of /dist/hadoop/common/hadoop-3.1.3

/ 解压
cd /opt/sofware
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

// 将Hadoop添加到环境变量
//(1)打开/etc/profile.d/my_env.sh文件
vim /etc/profile.d/my_env.sh
// (2)添加如下内容
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin    
// (3)source一下/etc/profile文件,让新的环境变量PATH生效
source /etc/profile
// (4)测试hadoop是否安装成功
hadoop version

Hadoop目录结构:

hadoop集群规划,大数据,环境配置,hadoop,大数据,hdfs

(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本

(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件

(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)

(4)sbin目录:存放启动或停止Hadoop相关服务的脚本

(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

 ④ 本地模式测试(官方WordCount)

// 1.创建一个wcinput文件夹
mkdir /opt/module/hadoop-3.1.3/wcinput
// 2.创建一个word.txt文件

cd /opt/module/hadoop-3.1.3/wcinput
vim word.txt
// 3.添加如下内容:
hadoop yarn
hadoop mapreduce
yuyu
yuyu
// 4.执行程序
cd /opt/module/hadoop-3.1.3
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
// 5. 查看结果
cat wcoutput/part-r-00000

hadoop集群规划,大数据,环境配置,hadoop,大数据,hdfs

 三、Hadoop 集群配置

主机名

hadoop101

hadoop102

hadoop103

IP

192.168.139.101

192.168.139.102

192.168.139.103

用户名

root

root

root

密码

123

123

123

(1)克隆 hadoop102、hadoop103

hadoop集群规划,大数据,环境配置,hadoop,大数据,hdfs

 克隆之后修改 IP 主机名

// 修改 ip 102/103
vim  /etc/sysconfig/network-scripts/ifcfg-ens33
// 修改主机名 hadoop102/hadoop103
hostnamectl set-hostname hadoop102

// 重启
reboot

(2)群分发脚本xsync

① 安装 rsync(三台机器上都要装)

yum -y install rsync

# 启动服务与开机自启动
systemctl start rsyncd.service
systemctl enable rsyncd.service

② 在 /root/bin 目录下创建 xsync 文件

cd /root/bin
vim xsync

粘贴以下内容:

#!/bin/bash
#1. 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi
​
#2. 遍历集群所有机器
for host in hadoop101 hadoop102 hadoop103       ##更改自己的服务器域名
do
    echo ==================== $host ====================
​
    #3. 遍历所有目录,挨个发送
    for file in $@
    do
​
        #4 判断文件是否存在
        if [ -e $file ]
        then
​
            #5. 获取父目录
            pdir=$(cd -P $(dirname $file); pwd)
            echo pdir=$pdir
​
            #6. 获取当前文件的名称
            fname=$(basename $file)
            echo fname=$fname
​
            #7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
            ssh $host "mkdir -p $pdir"
​
            #8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
            rsync -av $pdir/$fname $USER@$host:$pdir
        else
            echo $file does not exists!
    fi
    done
done

③ 给 xsync 添加权限:

 chmod 777 xsync

④ 添加全局变量

vim /etc/profile
​
在末尾添加:
PATH=$PATH:/root/bin
export PATH
​
退出,执行以下命令使其生效
source /etc/profile

(3)root 用户免密登录配置

① 在 ~./ssh 目录下生成一对密钥(3个节点都要生成)

cd ~/.ssh
ssh-keygen -t rsa
# 输入该命令后会有提示,一直回车即可

# 如果提示 【-bash: cd: .ssh: 没有那个文件或目录】 直接 ssh-keygen -t rsa 生成密钥就行

② hadoop101 节点中将公匙保存到 authorized_keys 文件中

[root@hadoop101 .ssh]# cat id_rsa.pub >> authorized_keys

③ 登录 hadoop102 和 hadoop103 节点,将其公钥文件内容拷贝到 hadoop101 节点的 authorized_keys 文件中

# hadoop102 节点的公钥拷贝
[root@hadoop102 .ssh]# ssh-copy-id -i hadoop101
​
# hadoop103 节点的公钥拷贝
[root@hadoop103 .ssh]# ssh-copy-id -i hadoop101

④ 在 hadoop101 节点中修改权限(~/.ssh 目录 和 authorized_keys 文件)

[root@hadoop101 .ssh]# chmod 700 ~/.ssh
[root@hadoop101 .ssh]# chmod 644 ~/.ssh/authorized_keys

⑤ 将授权文件分发到其他节点上

# 拷贝到 hadoop102 节点上
[root@hadoop101 .ssh]# scp /root/.ssh/authorized_keys hadoop102:/root/.ssh/
​
# 拷贝到 hadoop103 节点上
[root@hadoop101 .ssh]# scp /root/.ssh/authorized_keys hadoop103:/root/.ssh/

至此,免密码登录已经设定完成,注意第一次ssh登录时需要输入密码,再次访问时即可免密码登录

[root@hadoop101 .ssh]# ssh hadoop102
[root@hadoop101 .ssh]# ssh hadoop103

(4)集群配置

1、集群部署规划

> NameNode 和 SecondaryNameNode 不要安装在同一台服务器

> ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上。

主机名

hadoop101

hadoop102

hadoop103

IP

192.168.139.101

192.168.139.102

192.168.139.103

用户名

root

root

root

密码

123

123

123

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

2、配置文件说明

        Hadoop配置文件分两类:默认配置文件 自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

        ① 默认配置文件:

默认文件

文件存放在Hadoop的jar包中的位置

[core-default.xml]

hadoop-common-3.1.3.jar/core-default.xml

[hdfs-default.xml]

hadoop-hdfs-3.1.3.jar/hdfs-default.xml

[yarn-default.xml]

hadoop-yarn-common-3.1.3.jar/yarn-default.xml

[mapred-default.xml]

hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

        ② 自定义配置文件:

        core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在 $HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。

3、配置集群

① 配置 core-site.xml

[root@hadoop101 hadoop]# cd $HADOOP_HOME/etc/hadoop
[root@hadoop101 hadoop]# vim core-site.xml

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 

<configuration>
    <!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop101:8020</value>
    </property>

    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>

    <!-- 配置HDFS网页登录使用的静态用户为root -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>
</configuration>

② 配置 hdfs-site.xml

[root@hadoop101 hadoop]# vim hdfs-site.xml

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- nn web端访问地址-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop101:9870</value>
    </property>
    <!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop103:9868</value>
    </property>
</configuration>

③ 配置 yarn-site.xml

[root@hadoop101 hadoop]# vim yarn-site.xml

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop102</value>
    </property>

    <!-- 环境变量的继承 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

④ 配置 mapred-site.xml

[root@hadoop101 hadoop]# vim mapred-site.xml

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

4、在集群上分发配置好的Hadoop配置文件

[root@hadoop101 hadoop]# xsync /opt/module/hadoop-3.1.3/etc/hadoop/

5、去 102 和 103 上查看文件分发情况

[root@hadoop102 ~]# cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[root@hadoop103 ~]# cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

(5)群起集群

1、配置workers

[root@hadoop101 hadoop]# vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

【注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行】

添加如下内容:

hadoop101
hadoop102
hadoop103

同步所有节点配置文件

[root@hadoop101 hadoop]# xsync /opt/module/hadoop-3.1.3/etc

2、启动集群

① 第一次启动需要:在 hadoop101 节点格式化 NameNode

[root@hadoop101 hadoop-3.1.3]# cd /opt/module/hadoop-3.1.3/
[root@hadoop101 hadoop-3.1.3]# hdfs namenode -format

【注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群是第一次启动,直接在 hadoop101 节点格式化 NameNode;如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化】

② 启动 HDFS(在 NameNode 节点:hadoop101)

[root@hadoop101 hadoop-3.1.3]# cd /opt/module/hadoop-3.1.3/
[root@hadoop101 hadoop-3.1.3]# sbin/start-dfs.sh

如果启动遇到下面问题:

【ERROR: Attempting to operate on hdfs namenode as root】

hadoop集群规划,大数据,环境配置,hadoop,大数据,hdfs

解决方案:两种解决ERROR: Attempting to operate on hdfs namenode as root的方法_世幻水的博客-CSDN博客

vim /etc/profile

#添加:

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

#使生效:

source /etc/profile

③ 在配置了 ResourceManager 的节点(hadoop102)启动YARN

[root@hadoop102 hadoop-3.1.3]# cd /opt/module/hadoop-3.1.3/
[root@hadoop102 hadoop-3.1.3]# sbin/start-yarn.sh

④ Web 端查看 HDFS 的 NameNode

        1.浏览器中输入:http://hadoop101:9870

        2.查看HDFS上存储的数据信息

hadoop集群规划,大数据,环境配置,hadoop,大数据,hdfs

 ⑤ Web 端查看 YARN 的 ResourceManager

        1.浏览器中输入:http://hadoop102:8088

        2.查看YARN上运行的Job信息

hadoop集群规划,大数据,环境配置,hadoop,大数据,hdfs

3、集群基本测试

① 上传文件到集群

上传小文件

[root@hadoop101 ~]# hadoop fs -mkdir /input
[root@hadoop101 ~]# hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input

上传大文件

[root@hadoop101 ~]# hadoop fs -put /opt/sofware/jdk-8u144-linux-x64.tar.gz /

从 Web 页面查看上传的文件:

hadoop集群规划,大数据,环境配置,hadoop,大数据,hdfs

 ② 下载文件

[root@hadoop103 ~]# hadoop fs -get /jdk-8u144-linux-x64.tar.gz ./

hadoop集群规划,大数据,环境配置,hadoop,大数据,hdfs

 ③ 执行 wordcount 程序

[root@hadoop101 hadoop-3.1.3]# cd /opt/module/hadoop-3.1.3
[root@hadoop101 hadoop-3.1.3]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

hadoop集群规划,大数据,环境配置,hadoop,大数据,hdfs


(6)集群启动/停止方式总结 

1、各个模块分开启动/停止

① 整体启动 / 停止HDFS(需要在 NameNode 节点上执行)

start-dfs.sh / stop-dfs.sh

[root@hadoop101 hadoop-3.1.3]# /opt/module/hadoop-3.1.3/sbin/start-dfs.sh

② 整体启动 / 停止YARN(需要在 ResourceManager 节点上执行)

start-yarn.sh / stop-yarn.sh

[root@hadoop102 hadoop-3.1.3]# /opt/module/hadoop-3.1.3/sbin/start-yarn.sh

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

① 分别启动 / 停止HDFS组件

hdfs --daemon start / stop namenode / datanode / secondarynamenode

② 启动 / 停止YARN

yarn --daemon start / stop resourcemanager / nodemanager


(7)常用端口号说明

端口名称

Hadoop2.x

Hadoop3.x

NameNode内部通信端口

8020 / 9000

8020 / 9000/9820

NameNode HTTP UI

50070

9870

MapReduce查看执行任务端口

8088

8088

历史服务器通信端口

19888

19888

参考: 资料来源:(尚硅谷)尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优)_哔哩哔哩_bilibili文章来源地址https://www.toymoban.com/news/detail-518578.html

到了这里,关于Hadoop 集群搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • hadoop环境配置及HDFS配置

    环境与配置 centos8 hadoop 3.3.5 安装步骤 创建一个虚拟机,克隆三个虚拟机,master内存改大一点4G,salve内存1Gj 参考链接: https://blog.csdn.net/alfiy/article/details/122279914 报错参考: https://blog.csdn.net/weixin_41891385/article/details/118631106

    2024年02月08日
    浏览(44)
  • 单机搭建hadoop环境(包括hdfs、yarn、hive)

    单机可以搭建伪分布式hadoop环境,用来测试和开发使用,hadoop包括: hdfs服务器, yarn服务器,yarn的前提是hdfs服务器, 在前面两个的基础上,课可以搭建hive服务器,不过hive不属于hadoop的必须部分。 过程不要想的太复杂,其实挺简单,这里用最糙最快最直接的方法,在我的单

    2024年02月20日
    浏览(50)
  • HDFS 跨集群数据同步(hive,hadoop)

    两个不同的HDFS 集群数据迁移( A集群的数据 - B 集群) 采用的是 SHELL 脚本  按表进行; 日期分区进行; #!/bin/bash ##################### #创建人:DZH #创建日期: 2020-04 #内容: 数据迁移 ##################### ##################################### [ \\\"$#\\\" -ne 0 ] FILE=$1 path=$(cd `dirname $0`; pwd) ############## 获取执

    2024年04月27日
    浏览(56)
  • 0201hdfs集群部署-hadoop-大数据学习

    下面我们配置下单namenode节点hadoop集群,使用vmware虚拟机环境搭建。vmware虚拟机的配置,在下面链接2有,或者自行查阅文档。hadoop安装包可到官网下载,当前相关软件环境如下: 软件 版本 说明 hadoop 3.3.4 jar包 vmware 15.5 虚拟机 centos 7.6 服务器操作系统 xshell 6 远程连接 jdk 1.8

    2024年02月11日
    浏览(45)
  • 【运维】hadoop 集群安装(三)hdfs、yarn集群配置、nodemanager健康管理讲解

    上篇简单说明了多节点的hadoop节点怎么安装,但是没有细致的分析hadoop相关配置,具体怎么根据环境进行配置,接下来我们对这些配置进行讲解 Daemon Environment Variable NameNode HDFS_NAMENODE_OPTS DataNode HDFS_DATANODE_OPTS Secondary NameNode HDFS_SECONDARYNAMENODE_OPTS ResourceManager YARN_RESOURCEMANAGER_OP

    2024年02月10日
    浏览(41)
  • HDFS HA 集群搭建 - 基于Quorum Journal Manager(hadoop2.7.1)

    在Hadoop分布式文件系统(HDFS)中,检查点(Checkpointing)是一个关键的过程,它涉及到将文件系统的命名空间状态持久化到磁盘。这个状态由两部分组成:EditLogs和FsImage。 EditLogs:记录了自FsImage生成后对文件系统所做的所有修改。每次对文件系统的修改都会追加到EditLogs中。

    2024年01月16日
    浏览(45)
  • 大数据技术之Hadoop:HDFS集群安装篇(三)

    目录 分布式文件系统HDFS安装篇 一、为什么海量数据需要分布式存储 二、 分布式的基础架构分析 三、 HDFS的基础架构 四 HDFS集群环境部署 4.1 下载安装包 4.2 集群规划 4.3 上传解压 4.4 配置HDFS集群 4.5 准备数据目录 4.6 分发hadoop到其他服务器 4.7 配置环境变量 4.8 为普通用户授

    2024年02月14日
    浏览(49)
  • Hadoop集群环境搭建(超详细)

    Oracle Linux 7.4 JDK 1.8 Hadoop 2.7.4 1.实验准备三台机器分别为master,slave1,slave2 2.单击master机器桌面中的konsole图标 1.编辑/etc/hosts文件,出现如下界面 [Command 001]: 2.按i键,如下图 3.第一行前面添加#,如下图 4.按键ESC,按键:wq回车,保存退出。如下图 5.切换到slave1机器,重复1~4步骤 6

    2024年02月07日
    浏览(37)
  • 三台异构服务器搭建hadoop HA集群史上最详细方案(HDFS+YARN)

     一、系统基础服务配置 主机名 IP 操作系统 CPU 内存 磁盘 Hive01 10.86.102.104 Centos 7.9.2009 Xeon 4208 X16 192G 46T Hive02 10.86.102.102 Centos 7.9.2009 Xeon 4208 X16 192G 46T Hive03 10.86.102.105 Centos 7.9.2009 Xeon 8260 X48 256G         11T 最终组成的是一个双副本56T的集群,设置YARN内存共400GB(可调) 3台服务

    2024年02月07日
    浏览(54)
  • Hadoop-HDFS详解与HA,完全分布式集群搭建(细到令人发指的教程)

    本篇篇幅较长,有许多集群搭建干货,和枯燥乏味但是面试可能问到的理论知识。 思来想去不知道怎样才能鼓励自己加油学习,想想要面对的生活还是假吧意思打开学习视频吧。 目录 一、引入 hdfs是什么 hdfs的由来 hdfs架构体系 hdfs的优缺点 优点 缺点 二、HDFS_block简介和注意

    2023年04月19日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包