CDH6安装手册

CDH6安装手册,第1张

1. CDH服务器 *** 作系统安装 1.1 管理节点分区简单配置

管理节点数为1,总共4块盘(每块600G),做raid10,为系统盘;剩余2块硬盘(每块2.4T)整体做RAID1,为数据磁盘

图1-1 namenode服务器配置

Raid

用途

容量GB

分区目录

容量

用途

Raid1

系统盘

≥600

/

50G

*** 作系统根分区,包括所有目录,除去下面的目录

/tmp

30G

临时文件目录

/var

300G

*** 作系统运行时目录

/home

All

程序存放目录

Raid1

元数据盘

≥600

/home/tpsys

2.4T

数据目录

1.2 数据节点分区配置

数据节点数为2,选择4块600G的硬盘做raid10,为系统盘;5块2.4T的盘整体做JBOD,为数据盘。

Raid

用途

容量GB

分区目录

容量

用途

Raid1

系统盘

≥600

/

50G

*** 作系统根分区,包括所有目录,除去下面的目录

/tmp

30G

临时文件目录

/var

300G

*** 作系统运行时目录

/home

All

程序存放目录

JBOD

数据盘

≥600

/home/tpsys

All

存档DataNode数据以及MR中间数据

JBOD

数据盘

≥600

/home/tpsys

All

图1-2 date node服务器配置

2.服务器网络配置 2.1 配置IP

登录linux系统配置服务器IP

2.2 禁用IPV6

使用vi命令编辑 /etc/sysctl.conf 文件,加入如下内容

命令:vi /etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 1

并在命令行执行:sysctl -p

3. 基础配置 3.1 配置hosts

Vi /etc/hosts 添加:

10.0.96.141  node1

10.0.96.142 node2

10.0.96.143 nod

注意事项:注意主机名的大小写,若是存在问题,可增加小写别名

设置主机名生效:

命令行执行命令:hostnamectl set-hostname node1

执行命令验证:hostname

3.2 关闭SELINUX

修改文件/etc/selinux/config 将其中的SELINUX=enforcing修改为disabled

图3-3 禁用selinux

3.3 查看防火墙状态

执行命令:systemctl status firewalld

图3-4 查看防火墙状态

如是启用状态关闭防火墙

执行命令:systemctl stop firewalld

3.4 配置ssh免密登录

此处只配置主界面免密访问agent节点

执行生成秘钥:

执行命令:ssh-keygen -t rsa

图3-5 生成秘钥

执行如下命令分发秘钥

执行命令:ssh-copy-id -i ~/.ssh/id_rsa.pub root@sztpisjfxapp01t

3.5安装oracle JDK

关于JDK的安装,根据存在机器的环境来 *** 作,有些机器已经配置好了,可以直接使用。

创建JDK存放目录

执行命令:

for target in `cat /etc/hosts | grep -v localhost | grep -v ^$ | awk '{print $3}'`

do

ssh root@$target "mkdir -p /usr/java"

Done

切换至JDK tar包存放路径,解压JDK tar包并移动至 /usr/java

图3-6 解压JDK

执行命令:mv jdk1.8.0_144 /usr/java

分发解压包至所有节点/usr/java目录下面

执行命令:

for target in `cat /etc/hosts | grep -v localhost | grep -v ^$ | awk '{print $3}'`

do

scp -r /usr/java/jdk1.8.0_144 root@$target:/usr/java/

done

配置环境变量:

Vi /etc/profile

添加jdk路径:

export JAVA_HOME=/usr/java/jdk1.8.0_144

export PATH=$PATH:$JAVA_HOME/bin

图3-7 配置JDK环境变量

使配置文件生效:

source /etc/profile

使用openjdk安装:

卸载所有节点上的oracle jdk,安装yum自带的openjdk

执行命令:yum install -y java-1.8.0-openjdk

编辑cm文件:vim /etc/default/cloudera-scm-server

添加:export JAVA_HOME=”usr/lib/jvm/java-1.8.0-opnejdk”

重启cm server:systemctl restart cloudera-scm-server

3.6配置系统yum源

准备好安装linux系统的镜像,版本至少要高与当前的系统版本,执行如下命令挂载

执行命令:mount -o loop CentOS-7-x86_64-DVD-1804.iso /media 制作镜像挂载

切换至/etc/yum.repos.d/目录下面,配置本地系统yum源

图3-8 配置系统本地yum源

配置完成执行命令yum clean all && yum makecache

备注:如使用本地yum源则需要每台机器上都进行如下 *** 作,也可以使用ftp yum源!

3.7 安装HTTPD 服务

在cm节点安装httpd

执行命令:yum install -y httpd

启动http服务,输入命令:systemctl start httpd

将httpd服务添加到开机启动项,输入命令:chkconfig httpd on

查看httpd 的状态 ,输入命令:systemctl status httpd

图3-9 检查httpd的状态

修改/etc/httpd/conf/httpd.conf配置文件,在中修改以下内容

AddType application/x-gzip .gz .tgz .parcel

systemctl restart httpd

3.8 安装并配置ntp服务

执行如下命令安装ntpd服务

执行命令:yum -y install ntpd

修改所有节点的ntp配置文件

vi /etc/ntp.conf

主节点添加:

server 127.127.1.0

fudge 127.127.1.0 stratum 10

图3-10 ntp主节点配置文件

从节点(node1 =sztpisjfxapp01t.cntaiping.com)添加:

server sztpisjfxapp01t.cntaiping.com

fudge 127.127.1.0 stratum 10

图3-10 ntp从节点配置文件

如服务器时间偏差较大则执行命令手动同步

执行命令: ntpdate sztpisjfxapp01t.cntaiping.com

重启ntp服务

执行命令: systemctl restart ntpd

执行命令: ntpdc -np

图3-11 验证ntp是否同步成功

验证同步情况 =变成*表示同步成功!

3.9 安装createrepo ,配置CDH本地yum源

执行命令:yum install -y createrepo

切换至: /etc/yum.repos.d/

touch cloudera-manager.repo

添加内容:

name=cloudera-manager,version6.1.1

baseurl=http://10.0.96.141/cdh6.1.1

gpgcheck=0

enabled=1

图3-12 配置cm本地yum源

把cm的安装包放置/var/www/html/cdh6.1.1 目录下面

allkeys.asc

cloudera-manager-agent-6.1.1-769885.el7.x86_64.rpm

cloudera-manager-daemons-6.1.1-769885.el7.x86_64.rpm

cloudera-manager-server-6.1.1-769885.el7.x86_64.rpm

cloudera-manager-server-db-2-6.1.1-769885.el7.x86_64.rpm

enterprise-debuginfo-6.1.1-853290.el7.x86_64.rpm

执行命令:createrepo cdh6.1.1

执行命令:yum clean all

执行命令:yum makecache

图3-13 重建yum cache

打开浏览器输入:http://10.0.96.141/cdh6.1.1 如能正常显示,表示执行成功。此处注意常用端口被禁问题。

3.10 所有节点关闭透明大页

vim /etc/rc.local

添加内容:

touch /var/lock/subsys/local

echo never > /sys/kernel/mm/transparent_hugepage/defrag

echo never > /sys/kernel/mm/transparent_hugepage/enabled

图3-14 关闭透明大页

执行如下命令使生效

echo never > /sys/kernel/mm/transparent_hugepage/defrag

echo never > /sys/kernel/mm/transparent_hugepage/enabled

3.11 修改交换内存

执行命令:vim /etc/sysctl.conf

在文件/etc/sysctl.conf文件中如下内容

vm.swappiness=0

图3-15 禁用交换内存

并在命令行执行

sysctl -p

3.12 安装psycopg

安装依赖包

yum install -y gcc postgresql postgresql-server postgresql-devel python-devel

如果是python3 则安装python3-dev

将之前下载的psycopg文件解压并进入解压的psycopg文件夹执行命令

图3-16 解压psycopg

python setup.py build

python setup.py install

4. MYSQL安装 4.1解压安装mysql安装包

解压mysql安装包mysql-5.7.12-1.el7.x86_64.rpm-bundle.tar

删除mysql-community-server-minimal-5.7.12-1.el7.x86_64.rpm

图4-1 mysql安装包

安装mysql包:

yum -y install mysql-community-*

4.2 启动mysql数据库

启动mysql:

systemctl start mysqld

加入开机启动项:

systemctl enable mysqld

在日志文件中查看root密码:

cat /var/log/mysqld.log | grep password

初始化mysql数据库:

4.3 初始化mysql数据库

执行 /usr/bin/mysql_secure_installation

图4-2 初始化mysql数据库

图4-3 初始化mysql数据库

解压包方式安装及远程连接授权的地址:

Linux下安装mysql-5.7.24 - 简书

*** 作:

mysql -u root -p

修改mysql密码:

set password for root@localhost = password('yourpass');

开放远程连接:

mysql>use mysql;
msyql>update user set user.Host='%' where user.User='root';
mysql>flush privileges;
4.4 创建cm需要的库

执行创建cdh使用的数据库:

mysql -u root --password='P@ssw0rd' -e 'create database metastore default character set utf8;'

mysql -u root --password='P@ssw0rd' -e "CREATE USER 'hive'@'%' IDENTIFIED BY 'P@ssw0rd';"

mysql -u root --password='P@ssw0rd' -e "GRANT ALL PRIVILEGES ON metastore. * TO 'hive'@'%';"

mysql -u root --password='P@ssw0rd' -e "create user 'amon'@'%' identified by 'P@ssw0rd'"

mysql -u root --password='P@ssw0rd' -e 'create database amon default character set utf8'

mysql -u root --password='P@ssw0rd' -e "grant all privileges on amon .* to 'amon'@'%'"

mysql -u root --password='P@ssw0rd' -e "create user 'rman'@'%' identified by 'P@ssw0rd'"

mysql -u root --password='P@ssw0rd' -e 'create database rman default character set utf8'

mysql -u root --password='P@ssw0rd' -e "grant all privileges on rman .* to 'rman'@'%'"

mysql -u root --password='P@ssw0rd' -e "create user 'sentry'@'%' identified by 'P@ssw0rd'"

mysql -u root --password='P@ssw0rd' -e 'create database sentry default character set utf8'

mysql -u root --password='P@ssw0rd' -e "grant all privileges on sentry.* to 'sentry'@'%'"

mysql -u root --password='P@ssw0rd' -e "create user 'nav'@'%'identified by 'P@ssw0rd'"

mysql -u root --password='P@ssw0rd' -e 'create database nav default character set utf8'

mysql -u root --password='P@ssw0rd' -e "grant all privileges on nav.* to 'nav'@'%'"

mysql -u root --password='P@ssw0rd' -e "create user 'navms'@'%' identified by 'P@ssw0rd'"

mysql -u root --password='P@ssw0rd' -e 'create database navms default character set utf8'

mysql -u root --password='P@ssw0rd' -e "grant all privileges on navms.* to 'navms'@'%'"

mysql -u root --password='P@ssw0rd' -e "create user 'cm'@'%' identified by 'P@ssw0rd'"

mysql -u root --password='P@ssw0rd' -e 'create database cm default character set utf8'

mysql -u root --password='P@ssw0rd' -e "grant all privileges on cm.* to 'cm'@'%'"

mysql -u root --password='P@ssw0rd' -e "create user 'oozie'@'%'identified by 'P@ssw0rd'"

mysql -u root --password='P@ssw0rd' -e 'create database oozie default character set utf8'

mysql -u root --password='P@ssw0rd' -e "grant all privileges on oozie.* to 'oozie'@'%'"

mysql -u root --password='P@ssw0rd' -e "create user 'hue'@'%' identified by 'P@ssw0rd'"

mysql -u root --password='P@ssw0rd' -e 'create database hue default character set utf8'

mysql -u root --password='P@ssw0rd' -e "grant all privileges on hue.* to 'hue'@'%'"

mysql -u root --password='P@ssw0rd' -e "FLUSH PRIVILEGES;"

或者通过navicat工具连接mysql,然后执行下面语句:

create database metastore default character set utf8;

CREATE USER 'hive'@'%' IDENTIFIED BY 'Mlamp@123';

GRANT ALL PRIVILEGES ON metastore.* TO 'hive'@'%';

create user 'amon'@'%' identified by 'Mlamp@123';

create database amon default character set utf8;

grant all privileges on amon.* to 'amon'@'%';

create user 'rman'@'%' identified by 'Mlamp@123';

create database rman default character set utf8;

grant all privileges on rman.* to 'rman'@'%';

create user 'sentry'@'%' identified by 'Mlamp@123';

create database sentry default character set utf8;

grant all privileges on sentry.* to 'sentry'@'%';

create user 'nav'@'%' identified by 'Mlamp@123';

create database nav default character set utf8;

grant all privileges on nav.* to 'nav'@'%';

create user 'navms'@'%' identified by 'Mlamp@123';

create database navms default character set utf8;

grant all privileges on navms.* to 'navms'@'%';

create user 'cm'@'%' identified by 'Mlamp@123';

create database cm default character set utf8;

grant all privileges on cm.* to 'cm'@'%';

create user 'oozie'@'%' identified by 'Mlamp@123';

create database oozie default character set utf8;

grant all privileges on oozie.* to 'oozie'@'%';

create user 'hue'@'%' identified by 'Mlamp@123';

create database hue default character set utf8;

grant all privileges on hue.* to 'hue'@'%';

FLUSH PRIVILEGES;

此处初始化过程是必须的,后面c m服务及组件安装都用到。

5. 安装cm服务 5.1 使用JDBC

文件放到cm server同一台机器上。

*** 作一:

创建mysql JDBC jar包存放的路径:

for target in `cat /etc/hosts | grep -v localhost | grep -v ^$ | awk '{print $3}'`

do

ssh root@$target "mkdir /usr/share/java/"

Done

移动mysql-connector-java-5.1.44-bin.jar至/usr/share/java/ 目录下面

分发至所有节点:

for target in `cat /etc/hosts | grep -v localhost | grep -v ^$ | awk '{print $3}'`

do

scp /usr/share/java/mysql-connector-java-5.1.44-bin.jar root@$target:/usr/share/java/

done

创建软连接:

for target in `cat /etc/hosts | grep -v localhost | grep -v ^$ | awk '{print $3}'`

do

ssh root@$target "ln -s /usr/share/java/mysql-connector-java-5.1.44-bin.jar /usr/share/java/mysql-connector-java.jar"

done

*** 作二:

启动脚本显示:默认位置 /usr/share/java/ ,默认驱动名 mysql-connector-java.jar

# 创建文件夹

mkdir -p /usr/share/java/

# 进入 MySQL 驱动文件目录

cd /usr/share/java/

# 下载 MySQL 驱动

wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz

# 或者下载jar包:

wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar

# -bash: wget: 未找到命令

yum -y install wget

# 解压压缩包

tar zxvf mysql-connector-java-5.1.46.tar.gz

# 复制并且重命名

cp /usr/share/java/mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar /usr/share/java/mysql-connector-java.jar

图5-1 mysql jdbc

5.2 安装cm server并初始化数据库

先获取以下资源:

使用yum 命令安装cloudera manager

yum install -y cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm

yum install -y cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm

yum install -y cloudera-manager-server-db-2-6.3.1-1466458.el7.x86_64.rpm

安装完成后,配置cm数据库。

语法地址:

https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/prepare_cm_database.html

描述与实例:

/opt/cloudera/cm/schema/scm_prepare_database.sh 数据库类型 数据库 用户名 密码

/opt/cloudera/cm/schema/scm_prepare_database.sh mysql cm cm P@ssw0rd

日志如下:

JAVA_HOME=/usr/java/latest

Verifying that we can write to /etc/cloudera-scm-server

Creating SCM configuration file in /etc/cloudera-scm-server

Executing:/usr/java/latest/bin/jav-cp /usr/share/java/mysql-connector-java.jar:/usr/share/java/oracle-connector-java.jar:/usr/share/java/postgresql-connector-java.jar:/opt/cloudera/cm/schema/../lib/* com.cloudera.enterprise.dbutil.DbCommandExecutor/etc/cloudera-scm-server/db.properties com.cloudera.cmf.db.

[main] DbCommandExecutor INFO Successfully connected to database.

All done, your SCM database is configured correctly!

然后启动 CM-server:systemctl start cloudera-scm-server

查看数据库cm,会出现一堆表,说明 *** 作成功。

存在问题:

启动失败,如:

解决思路:确认jdk安装路径

CM会去 /usr/java 目录下加载jdk,对于使用yum/rpm安装的jdk,/usr/java 是默认路径,不会有问题。但对于使用二进制文件手动安装的jdk,可能不在这个路径下,解决方法是使用软连接将java路径连接到 usr/java

ln -s /data/java/jdk1.8.0_333 /usr/java/default

还有存在这种原因:

ln -s /data/java/jdk1.8.0_333/bin/java /usr/bin/java

ln -s /data/java/jdk1.8.0_333/bin/java /bin/java

日志显示正常,但数据库没有表,问题及方案如下。

方案一:解决思路。

问题解决:CDH6.3.1初始化scm_prepare_database数据库scm为空 - 灰信网(软件开发博客聚合)

方案二:从已有版本的数据库手动导表出来, *** 作如下:

步骤一:在本地一台机器部署mysql,安装 clouder-scm-server 服务,将初始的 scm 表 sql 导出。

mysqldump -uroot -p > A_dump.sql

步骤二:将备份的 sql 语句导入到线上 scm 库所在的地址。

mysql -h -u -p < A_dump.sql

5.3 移动parcel包至cm默认目录

主节点执行:

*** 作一:将CDH目录文件复制到如下目录

mkdir -p /opt/cloudera/parcel-repo

CDH-6.1.1-1.cdh6.1.1.p0.875250-el7.parcel

manifest_6.11.json

生成sha文件:

sha1sum CDH-6.1.1-1.cdh6.1.1.p0.875250-el7.parcel | awk '{print $1}' > CDH-6.1.1-1.cdh6.1.1.p0.875250-el7.parcel.sha

*** 作二:将CDH压缩包解压后,复制如下文件:

CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel

CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1

manifest.json

并将 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1 改为 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha

图5-2 CDH安装包存放目录

注意,此步骤的文件必须 *** 作

5.4 重启cm服务至节点安装

重启cm服务:

执行命令:systemctl restart cloudera-scm-server.service

重启过程中,这个目录 /opt/cloudera/parcel-repo下会生成如下文件

CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.torrent

若没有这个文件,需要排查原因。可能没有创建这个文件的权限,查看日志文件如下:

tail -f 10 /var/log/cloudera-scm-server/cloudera-scm-server.log

等待1分钟,登录浏览器进入页面:10.0.96.141:7180

若是想修改7180,则执行如下 *** 作:

mysql -uroot -p

use CM;

select * from CONFIGS where ATTR='http_port';

update CONFIGS set VALUE='8089' where ATTR='http_port';

重启服务:systemctl restart cloudera-scm-server.service

若是没有这个记录,则插入一条数据。

修改端口资料链接:https://blog.csdn.net/zcb_data/article/details/80814245

6.网页界面安装 6.1 界面安装

登录浏览器进入页面:10.0.96.141:7180 用户名admin, 密码 admin

是否已经设置了AUTO-TLS,如果已经在前面设置了,会看到如下的提示,然后进入下一步

如果是连续的IP地址,可以像截图那样写,10.0.96.[141-143],表示总共是3个节点,IP分别为141,142,143,点Search进行扫描,扫描成功后,进入下一步

这里是指定安装包的位置,Cloudera Manager Agent 选择Custom Repository, 使用之前安装CM6的地址,如 http://10.0.96.141/cdh6.1.1

下面是选择CDH的Parcel 包位置,点more options 查看Local Parcel 目录是否为一开始存放Parcel 的位置,默认为/opt/cloudera/parcel-repo

如果不需要修改,点Cancel 关闭选项窗口,这时候如果系统找到安装包,会在外面的主界面上显示相应的CDH版本。如下图所示:

安装JDK, 前面的步骤已经安装JDK了,所以这里直接点下一步就可以了

输入各节点的root 密码,注意: 所有节点的root 密码需一致,然后点击下一步就开始安装了。此处若没有root账号,则使用普通账号免密 *** 作,注意部署过程的文件写入权限问题,需要实时查看日志。

等待安装完成

此处容易出现agent检测问题,如下:

安装失败。 无法接收 Agent 发出的检测信号。

请确保主机的名称已正确配置。

请确保端口 7182 可在 Cloudera Manager Server 上访问(检查防火墙规则)。

请确保正在添加的主机上的端口 9000 和 9001 空闲。

检查正在添加的主机上 /var/log/cloudera-scm-agent/ 中的代理日志(某些日志可在安装详细信息中找到)。

如果在 Cloudera Manager 中启用为代理使用 TLS 加密(管理 -> 设置 -> 安全),请确保 /etc/cloudera-scm-agent/config.ini 在正在添加的主机上有 use_tls=1。重启相应的代理,并单击此处的重试链接。

排查方式:

检查主机名称是否一致,涉及文件(/etc/hostname、 /etc/hosts、/etc/sysconfig/network),network需要重启(service network restart)

确保server服务启动,7182端口可以访问。

查看9000 、9001、19001端口是否被占用。

排查 /var/log/cloudera-scm-agent/ 中的日志。

检查是否开启了t l s加密 *** 作

安装完成后等待健康检查,检查没问题进入下一步

指定节点模版,因为是新装的,所以没有模版,下一步就可以了

根据不同的场景选择,默认为Essentials

这是点击Esstials 方案后,系统自动为每个节点给了的角色分配方案,需根据实时项目情况调整,这里以默认为例,进入下一步

这一步填入MYSQL所在的服务器,及对应数据库的名字,用户名及密码,然后点击下方的“TEST CONNECTION” 进行测试。此处的数据库及账号密码是 4.4 创建c m需要的库 的设置库账号密码

对节点的参数进行设置,本手册以默认配置作为示例

对节点的参数进行设置,本手册以默认配置作为示例

到这一步说明节点配置引导已经全部完成了,点击“Finish”关闭

这时会返回主界面,并能查看各服务的状态,至此,CDH6 的安装完成!!!

6.2 flink组件安装

安装教程:CDH6.3.2集成Apache Flink1.12.0 - whcsrl_技术网

问题系列:

/opt/cloudera/parcels/FLINK/lib/flink/bin/flink-yarn.sh: line 17: rotateLogFilesWithPrefix: command not found

解决方案:

flink/bin/flink-yarn.sh: line 17: rotateLogFilesWithPrefix: command not found_BigBig_Data的博客-CSDN博客

所有机器上,执行如下 *** 作:

cd /opt/cloudera/parcels/FLINK/lib/flink/lib/

wget https://repo.maven.apache.org/maven2/org/apache/flink/flink-shaded-hadoop-2-uber/2.7.5-10.0/flink-shaded-hadoop-2-uber-2.7.5-10.0.jar

若是flink-shaded-hadoop-2-uber-2.7.5-10.0.jar版本不行,可以升级jar包

6.3 Hue组件安装

安装教程:【CDH6】Hue 的安装及使用 - 链滴

7.问题集合 7.1 hive问题

Required table missing : "VERSION" in Catalog "" Schema "". DataNucleus requires this table to perform its persistence operations. Either your MetaData is incorrect, or you need to enable "datanucleus.schema.autoCreateTables"

解决方案:去hive安装目录下的bin执行下面命令:

bin/schematool -dbType mysql -initSchema --verbose

若是遇到初始化失败问题,参考如下文章处理:

Hive初始化源数据库失败:Schema initialization FAILED! Metastore state would be inconsistent_我在燕京有把刀的博客-CSDN博客_hive初始化元数据库报错

若是存在加载MySQL驱动问题,则下载MySQL驱动到hive的lib目录下

若是执行出现 :Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061)

则删除MySQL的hive表,再重新建库,最后执行如下命令:

bin/schematool -dbType mysql -initSchema --verbose

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1294675.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存