hadoop官方文档_运维必备技能:云平台与大数据-hadoop

技能目标:

理解CDH核心概念

会进行CDH群集的部署

会使用管理控制台对CDH群集进行管理

会使用添加CDH群集服务

8.1 案例分析

8.1.1 案例概述

Apache Hadoop是目前最主流的在通用硬件构建大型群集上运行应用程序的分布式架构。采用Apache 2.0许可协议发布开源协议,从而使用户可以免费使用以及任意修改Hadoop。官方版本称为社区版Hadoop,市面上有很多其他Hadoop版本,比较流行的有2个版本,Apache版本和Cloudera版本。

Apache Hadoop:维护人员比较多,更新频率比较快,稳定性行相对比较差。

Cloudera Hadoop(CDH):是Cloudera公司的发行版本,基于Apache Hadoop的二次开发,优化了组件兼容和交互接口、简化安装配置、增加Cloudera兼容特性。

8.1.2 案例前置知识点

CDH常用安装方式包括:Cloudera Manager在线安装、Parcel安装、YUM安装以及RPM安装。官方文档推荐使用Parcel模式进行安装,故本次安装采用Percel方式进行。这里先下载离线资源,由于官方版本众多,一定要注意根据系统选择对应版本,若版本选择有误,安装过程中也会出现错误。

以下是本案例使用的安装介质:

1)Cloudera Manager

可以从地址进行下载,本案例下载的版本是cloudera-manager-centos7-cm5.14.0_x86_64.tar.gz。

2)JDBC驱动

可以从MySQL官方网站http://dev.mysql.com/downloads/connector/j/上下载最新的MySQL JDBC驱动程序,本案例下载的是mysql-connector-java-5.1.46.tar.gz

3)CDH Percel包

可以从http://archive.cloudera.com/cdh5/parcels/地址进行下载,分别需要下载三个文件,本案例下载的是CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel、 CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel.sha1、manifest.json三个文件。

4)Kafka CSD包

可以从http://archive.cloudera.com/kafka/parcels/latest/地址进行下载,分别需要下载两个文件,本案例下载的是KAFKA-2.0.2-1.2.0.2.p0.5-el7.parcel、KAFKA-2.0.2-1.2.0.2.p0.5-el7.parcel.sha1。从包,再下载关于Kafka的manifest.json文件(注意别和CDH的manifest.json文件弄混淆,因为它们的文件名一样)。下载地址如下:。

8.1.3 案例环境

1. 本案例实验环境

本案例使用CentOS 7.3操作系统,具体如表8-1所示。

表8-1 本案例环境

本案例拓扑图如图8.1所示。

41c8a62a2ab06102f661837ff796c712.png

图8.1

2. 案例需求

1)部署CDH集群。

2)添加Kafka服务。

3. 案例实现思路

1)前期环境准备工作。

2)安装MySQL数据库。

3)安装CDH。

4)配置CDH群集。

5)配置并添加Kafka服务。

8.2 案例实施

8.2.1 前期环境准备工作

1. 修改主机名

分别配置各个节点的主机名。

IP地址为192.168.9.233的主机执行下面命令:

[root@localhost ~]# hostnamectl set-hostname cdhmaster

IP地址为192.168.9.234的主机执行下面命令:

[root@localhost ~]# hostnamectl set-hostname cdhslave01

IP地址为192.168.9.235的主机执行下面命令:

[root@localhost ~]# hostnamectl set-hostname cdhslave02

2. 关闭防火墙和SELinux

需要在所有的节点上执行。因为涉及到的端口比较多,临时关闭防火墙是为了安装起来更方便,安装完毕后可以根据需要设置防火墙策略,保证群集安全。

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# systemctl disable firewalld

[root@localhost ~]# vim /etc/sysconfig/selinux

SELINUX=disabled

[root@localhost ~]# reboot

3. 增加hosts解析

所有节点修改/etc/hosts文件,配置主机名与IP地址的解析。

192.168.9.233 cdhmaster

192.168.9.234 cdhslave01

192.168.9.235 cdhslave02

4. 同步各节点时间

在所有节点上分别配置ntp服务,确保每个节点与网络上的时钟服务器进行时间同步。在此,以cdhmaster上配置为例。

[root@cdhmaster ~]# yum install ntp -y

[root@cdhmaster ~]# vi /etc/ntp.conf

将配置文件中系统默认的四个时钟服务器都注释,添加阿里云的时钟服务器:

server ntp1.aliyun.com iburst

[root@cdhmaster ~]# systemctl restart ntpd

[root@cdhmaster ~]# systemctl enable ntpd

[root@cdhmaster ~]# ntpstat

synchronised to NTP server (120.25.115.20) at stratum 3

time correct to within 1048 ms

polling server every 64 s

5. 安装JDK环境

在所有节点上安装JDK环境,版本要求1.8以上。如果系统中有自带的JDK,需要先删除自带的JDK相关软件包。在cdhmaster节点上配置为例。

[root@cdhmaster ~]# tar zxvf jdk-8u171-linux-x64.tar.gz -C /opt

[root@cdhmaster ~]# ln -s /opt/jdk1.8.0_171 /opt/jdk

创建软链接/usr/java/default到/opt/jdk,否则Spark将无法安装完成。

[root@cdhmaster ~]# mkdir /usr/java

[root@cdhmaster ~]# ln -s /opt/jdk /usr/java/default

[root@cdhmaster ~]# vim /etc/profile

export JAVA_HOME=/opt/jdk

export PATH=$JAVA_HOME/bin:$PATH

[root@cdhmaster ~]# source /etc/profile

[root@cdhmaster ~]# java -version

java version "1.8.0_171"

Java(TM) SE Runtime Environment (build 1.8.0_171-b11)

Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

6. 设置主节点到其它节点的免密钥登录

[root@cdhmaster ~]# ssh-keygen -t rsa

[root@cdhmaster ~]# ssh-copy-id cdhslave01

[root@cdhmaster ~]# ssh-copy-id cdhslave02

从主节点分别测试登录

[root@cdhmaster ~]# ssh cdhslave01

Last login: Mon Jun 4 14:37:35 2018 from 192.168.9.232

[root@cdhmaster ~]# ssh cdhslave02

Last login: Mon Jun 4 14:37:49 2018 from 192.168.9.232

7. 交换分区和大页设置

分别在三个节点上禁用交换分区和透明大页,否则会在安装配置CDH群集环境检测中报错。

[root@cdhmaster ~]# sysctl -w vm.swappiness=0

vm.swappiness = 0

[root@cdhmaster ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag

[root@cdhmaster ~]# echo never >/sys/kernel/mm/transparent_hugepage/enabled

[root@cdhmaster ~]# echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.d/rc.local

[root@cdhmaster ~]# echo "echo never > /sys/kernel/mm/transparent_hughugepage/enabled" >> /etc/rc.d/rc.local

[root@cdhmaster ~]# chmod +x /etc/rc.d/rc.local

8.2.2 安装数据库

在主节点cdhmaster上安装MySQL数据库。CentOS 7.3上自带的数据库为MariaDB,需要重新下载MySQL官方社区版本。本案例下载的是mysql-5.7.22-linux-glibc2.12版本,没有特殊的要求,只是省去了编译的过程。

[root@cdhmaster ~]# rpm -qa | grep mariadb

mariadb-libs-5.5.52-1.el7.x86_64

[root@cdhmaster ~]# rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64

从MySQL官网http://dev.mysql.com/downloads/mysql/下载MySQL软件包进行配置。

[root@cdhmaster ~]# useradd mysql -s /sbin/nologin

[root@cdhmaster ~]# tar zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

[root@cdhmaster ~]# mv mysql-5.7.22-linux-glibc2.12-x86_64 /usr/local/mysql

[root@cdhmaster ~]# cd /usr/local/mysql/bin

第一次初始化数据库不跟任何参数,默认数据文件会保存在/usr/local/mysql/data目录下。

[root@cdhmaster bin]# ./mysqld --initialize --user=mysql

2018-06-04T07:59:09.682950Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

2018-06-04T07:59:10.657210Z 0 [Warning] InnoDB: New log files created, LSN=45790

2018-06-04T07:59:10.886589Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.

2018-06-04T07:59:11.016997Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 2a48c8e7-67cd-11e8-bce1-5254002d8600.

2018-06-04T07:59:11.038907Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.

2018-06-04T07:59:11.039951Z 1 [Note] A temporary password is generated for root@localhost: b

[root@cdhmaster bin]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

[root@cdhmaster bin]# /etc/init.d/mysqld start

Starting MySQL.Logging to '/usr/local/mysql/data/cdhmaster.err'.

SUCCESS!

[root@cdhmaster bin]# ln -s /usr/local/mysql/bin/mysql /usr/sbin/

[root@cdhmaster bin]# mysql -u root –p //输入前面自动生成的密码

使用随机产生的密码登录MySQL,然后修改密码为123456

mysql> alter user 'root'@'localhost' identified by '123456';

Query OK, 0 rows affected (0.00 sec)

创建数据库和授权:

mysql> CREATE DATABASE hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

Query OK, 1 row affected (0.00 sec)

mysql> CREATE DATABASE oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on *.* to 'cdh'@'localhost' identified by '123456' with grant option;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> grant all privileges on *.* to 'cdh'@'%' identified by '123456' with grant option;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

8.2.3 安装CDH

1. 安装相关依赖包

在实际安装过程中,CDH对部分包存在依赖。根据环境差异,具体安装过程中可能存在一定的区别,注意分析查看日志文件。本案例安装psmisc、libxslt、libxslt-python、perl四个软件包。

[root@cdhmaster ~]# yum install -y psmisc libxslt libxslt-python perl

在cdhslave01与cdhslave02上也需要安装

2. 安装Cloudera Manager

将下载的cloudera-manager-centos7-cm5.14.0_x86_64.tar.gz上传到主节点(cdhmaster)上,进行解压。

[root@cdhmaster ~]# tar zxvf cloudera-manager-centos7-cm5.14.0_x86_64.tar.gz -C /opt/

[root@cdhmaster ~]# mv /opt/cm-5.14.0/ /opt/cm

3. 安装JDBC驱动

将mysql-connector-java-5.1.46.tar.gz软件包上传到主节点,拷贝到Cloudera Manager安装目录下的cm/share/cmf/lib/目录中,并修改权限。

[root@cdhmaster ~]# tar zxvf mysql-connector-java-5.1.46.tar.gz

[root@cdhmaster ~]# cd mysql-connector-java-5.1.46/

[root@cdhmaster mysql-connector-java-5.1.46]# chmod +x mysql-connector-java-5.1.46-bin.jar

[root@cdhmaster mysql-connector-java-5.1.46]# cp mysql-connector-java-5.1.46-bin.jar /opt/cm/share/cmf/lib/mysql-connector-java.jar

[root@cdhmaster mysql-connector-java-5.1.46]# mkdir /usr/share/java

[root@cdhmaster mysql-connector-java-5.1.46]# cp mysql-connector-java-5.1.46-bin.jar /usr/share/java/mysql-connector-java.jar

4. 创建Cloudera Manager用户

在所有节点上均需要创建Cloudera Manager用户。

[root@cdhmaster ~]# useradd --system --home=/opt/cm/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

5. 初始化Cloudera Manager数据库

使用Cloudera Manager的scm_prepare_database.sh初始化数据库,数据库名为cm,对应的用户名、密码为scm和123456。

[root@cdhmaster ~]# /opt/cm/share/cmf/schema/scm_prepare_database.sh mysql cm -h localhost -ucdh -p'123456' scm '123456'

JAVA_HOME=/opt/jdk

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

Mon Jun 04 16:47:24 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

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

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

Mon Jun 04 16:47:25 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

2018-06-04 16:47:25,732 [main] INFO com.cloudera.enterprise.dbutil.DbCommandExecutor - Successfully connected to database.

All done, your SCM database is configured correctly!

6. 配置Cloudera Manager

修改Cloudera Manager的配置文件,将server_host改为主节点cdhmaster主机。

[root@cdhmaster ~]# vim /opt/cm/etc/cloudera-scm-agent/config.ini

server_host=192.168.9.233

7. 同步Cloudera Manager数据到其他节点

将Cloudera Manager数据同步到其他节点的命令如下:

[root@cdhmaster ~]# scp -r /opt/cm/ cdhslave01:/opt/

[root@cdhmaster ~]# scp -r /opt/cm/ cdhslave02:/opt/

注意:如果在同步到其他节点之前,启动过代理程序,需要删除所有服务器上的/opt/cm/lib/cloudera-scm-agent中生成response.avro和uuid两个文件,并重启代理程序,否则服务程序将无法正确检查到agent。

8. 上传Parcel文件

上传Parcel相关文件到主节点服务器的/opt/cloudera/parcel-repo/目录中:

[root@cdhmaster ~]# mv manifest.json CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel.sha1 /opt/cloudera/parcel-repo/

[root@cdhmaster ~]# cd /opt/cloudera/parcel-repo/

重新命名CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel.sha1文件:

[root@cdhmaster parcel-repo]#mv CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel.sha1 CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel.sha

9. 启动Cloudera Manager服务

启动之前,在/opt/cm/etc/cloudera-scm-server/db.properties文件中增加如下内容:

com.cloudera.cmf.db.useSSL=true

[root@cdhmaster ~]# /opt/cm/etc/init.d/cloudera-scm-server start

[root@cdhmaster ~]# /opt/cm/etc/init.d/cloudera-scm-agent start

以上脚本是启动命令,停止或重启命令仅需将start变成stop或restart即可。

在cdhslave01和cdhslave02节点上启动Cloudera Manager代理服务。

[root@cdhslave01 ~]# /opt/cm/etc/init.d/cloudera-scm-agent start

[root@cdhslave02 ~]# /opt/cm/etc/init.d/cloudera-scm-agent start

8.2.4 安装配置CDH群集

Cloudera Manager Server和Agent服务都启动后,就可以进行CDH5的安装配置了。

1. 使用CDH管理控制台

使用浏览器打开,登录Cloudera Manager的Web管理控制台,如图8.2所示。默认的用户名和密码为admin/admin。

d01ed675f2dc1601deabfaf99d0d4084.png

图8.2

第一次进入时,需选择接受用户授权协议,之后需要选择安装CDH版本,如图8.3所示。这里选择Cloudera Express,点击"继续"按钮,进行CDH群集配置。

b757144f4fba5cd3b6e36e46e2eb2474.png

图8.3

第一次配置CDH群集,会自动启动安装向导进行配置安装。

在"当前管理的主机"标签,勾选所有的服务器,成为安装群集主机节点,点击"继续"按钮。 如图8.4所示。

10a4b81349eca494f212e6e7acf3bb84.png

图8.4

注意:只有已启动cloudera-scm-agent的主机才能被Cloudera Manager管理。

也可以在"New Hosts"标签,指定主机进行配置的主机,有多种指定方式:直接列出IP地址或主机名,多台主机可以以逗号、分号、制表符、空格或放置在单独的行。指定范围例如:8.0.222.[5-7] 或cdhslave0[2-3],并且需要关闭指定主机防火墙。

选择需要安装的Parcel包,点击"继续"按钮进入下一步,如图8.5所示。若没有,检查相关文件是否被正确放入安装目录的cloudera/parcel-repo/中。

333965d5903fb5be8155aad0173ce2e5.png

图8.5

之后会将Parcel分发到三台服务器,并进行解压、激活操作,该步骤会花费一定的时间,如图8.6所示。等待操作完成后,点击"继续"按钮即可。

4967c76a1a23243b3428f339f17284a0.png

图8.6

在激活完成后,HIVE以及Oozie安装需要使用到MySQL JDBC驱动,需要在所有节点上执行以下操作。下面以在cdhmaster主机上操作为例。

[root@cdhmaster ~]# cd mysql-connector-java-5.1.46/

[root@cdhmaster mysql-connector-java-5.1.46]# cp mysql-connector-java-5.1.46-bin.jar /opt/cloudera/parcels/CDH/lib/hive/lib/mysql-connector-java.jar

[root@cdhmaster mysql-connector-java-5.1.46]#cp mysql-connector-java-5.1.46-bin.jar /opt/cloudera/parcels/CDH/lib/hadoop/lib/mysql-connector-java.jar

[root@cdhmaster mysql-connector-java-5.1.46]# cp mysql-connector-java-5.1.46-bin.jar /var/lib/oozie/mysql-connector-java.jar

之后检查安装环境是否满足要求。如安装过程依据环境准备完成所有的准备工作,将无提示信息,如图8.7所示。

8df265f0a26592a01be649a1109f8779.png

图8.7

如果有警告提示内容,按照提示进行修正即可,完成后进行重新检测。全部修正后,点击"完成"按钮,进入正式安装过程。

2. 群集设置

关于CDH群集设置,需要通过以下几个步骤实现。

首先选择安装CDH群集的服务,选择自定义服务,然后仅安装需要的HDFS、YARN、Oozie、Hive等组件,如图8.8所示。

d150f1d7dbf9411ed5fc724ace846115.png

图8.8

安装太多不需要的服务在运行过程中会占用较多资源,且选择服务过多到下一步初始化和启动各节点角色的时候会花费大量时间。

这里,不必担心没安装的服务以后是否需要。在CM管理控制台中,还可以随时对各节点的服务进行添加和变更。然后,将不同服务分配到不同服务器上,如图8.9所示。

2cae7fbf13fe252fd42a44a5507cb02d.png

图8.9

点击"继续"按钮,之后需要输入Hive、Oozie的数据源配置,按照之前在MySQL数据库中所创建的数据填写,如图8.10所示。点击"测试连接"按钮,测试成功通过后,点击"继续"按钮。

32f44f8c0c9a7609a19cb6e2b348d45d.png

图8.10

之后,依据要求,调整系统配置参数,本案例中不作任何修改。点击"继续"按钮。如图8.11所示。

c8d4153f1fd49e7de991c57e19766d3a.png

图8.11

点击"继续"按钮,之后CM将依据前面做的配置内容,对环境进行部署。服务安装完成后,所有服务会自动启动,按照向导完成安装即可。如图8.12所示。

e694d0fca8c09c3e6608d342a4f5f511.png

图8.12

如本步骤出现问题,注意查看CM的运行日志,查找相对应的报错信息。CM运行日志的具体目录为/opt/cm/run/cloudera-scm-agent/process。

成功安装之后,进入Cluster页面,如图8.13所示。

a95001ce7b4e70d91925cda1aefb8c64.png

图8.13

8.2.5 配置并添加Kafka服务

1. 上传Kafka介质

将KAFKA-1.2.0.jar上传到cdhmaster服务器的/opt/cloudera/csd目录中,将KAFKA-2.0.0-1.kafka2.0.0.p0.12-el7.parcel、

KAFKA-2.0.0-1.kafka2.0.0.p0.12-el7.parcel上传到cdhmaster服务器的/opt/cloudera/parcel-repo目录中。将KAFKA-2.0.0-1.kafka2.0.0.p0.12-el7.parcel.sha1重命名为KAFKA-2.0.0-1.kafka2.0.0.p0.12-el7.parcel.sha 。

[root@cdhmaster ~]# mv KAFKA-1.2.0.jar /opt/cloudera/csd

[root@cdhmaster ~]# mv KAFKA-2.0.2-1.2.0.2.p0.5-el7.parcel /opt/cloudera/parcel-repo

[root@cdhmaster ~]# mv KAFKA-2.0.2-1.2.0.2.p0.5-el7.parcel.sha1 /opt/cloudera/parcel-repo/KAFKA-2.0.2-1.2.0.2.p0.5-el7.parcel.sha

2. 分配、激活Parcel

在Cloudera Manager的管理控制台,点击"主机"选项卡中的"Parcel"界面,检查新的Parcel后,先分配再激活Kafka对应的Parcel,如图8.14所示。

a69966f689666f2afa676d658bda0901.png

图8.14

3. 添加Kafka服务

1)下载一个关于Kafka的manifest.json文件,上传到cdhmaster节点的/root目录下,下载地址在案例前置知识点中有说明。

[root@cdhmaster ~]# mv /opt/cloudera/parcel-repo/manifest.json /opt/cloudera/parcel-repo/manifest.json.bak

[root@cdhmaster ~]# mv manifest.json /opt/cloudera/parcel-repo

在"Cluster"选项卡,从"Actions"下拉列表中选择"添加服务",进入添加服务页面,选择需要增加Kafka服务,如图8.15所示。

注意:Kafka服务依赖Zookeeper服务,需要先单独安装Zookeeper服务,再安装Kafka服务才可以。

b7f00f1a75e7e1eda6f1bdb940a32012.png

图8.15

3)点击"继续"按钮,Kafka Broker选择3个主机,如图8.16所示。

8ebb50ec317b6aadf81dbbc6546c6051.png

图8.16

4)点击右下角"继续"按钮,默认份数修改为"3"份,如图8.17所示。

f5e5f5af666143a04bae7cdb96267801.png

图8.17

5)点击"继续"按钮,正常添加Kafka服务后启动,如图8.18所示。

546038a9e4aa0727edb3430a5f30858a.png

图8.18

6)点击右下角的"继续"按钮,提示已经将Kafka服务添加到集群,如图8.19所示。

d17fe893ec117e602c4238c6d6d63f59.png

图8.19

7)点击右下角的"完成"按钮,添加Kafka服务成功后的主界面,如图8.20所示。

a89a4a554bcb719730768bca46005c8a.png

图8.20

至此,Kafka服务添加完毕。如果需要添加其它服务,按照同样方式添加即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值