CentOS6、7 局域网离线安装Ambari

(自己安装多遍,踩过各种坑,终于趟顺了,下面绝对完整版)

(安装67的步骤一样,只是相关执行命令67会有差别

1.1 Ambari

       Ambari的作用来说,就是创建、管理、监视 Hadoop的集群Ambari自身也是一个分布式架构的软件,主要由两部分组成:Ambari ServerAmbari Agent。简单来说,用户通过Ambari Server通知 Ambari Agent安装对应的软件;Agent会定时地发送各个机器每个软件模块的状态给 Ambari Server,最终这些状态信息会呈现在AmbariGUI,方便用户了解到集群的各种状态,并进行相应的维护。

1.2 HDP 

HDPhortonworks的软件栈,里面包含了hadoop生态系统的所有软件项目,比如HBase,Zookeeper,Hive,Pig等等。

1.3 HDP-UTILS

HDP-UTILS是工具类库。 

搭建环境

虚拟机操作系统: CentOS6.5  64

JDKjdk-1.8.0_121

Ambari2.4.2.0

HDP2.5.3.0

HDP-UTILS1.1.0.21

Mysql:mysql-5.7.20-1.el6.x86_64.rpm-bundle

2.1服务器安装准备工作(要离线安装所以下面的软件要提前下载好)

2.1.1下载CentOS6.5 ISO文件

http://mirrors.yun-idc.com/centos/6/isos/x86_64/CentOS-6.5-x86_64-Everything-1611.iso

2.1.2下载以下三种仓库软件包(tar.gz文件)

HDP Repository

http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.5.3.0/HDP-2.5.3.0-centos6-rpm.tar.gz

HDP-Utils Repository

http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.21/repos/centos6/HDP-UTILS-1.1.0.21-centos6.tar.gz

Ambari Repository

http://public-repo-1.hortonworks.com/ambari/centos6/ambari-2.4.2.0-centos6.tar.gz

注意:
由于centosredhat的版本是一一对应的,所以Redhat6.5对应centos6Redhat7.3对应centos7
路径的版本号可以根据自己需要进行调整,比如ambari-2.1.0-centos6 可以 换成 ambari-2.6.0-centos6

2.1.3下载MySQL文件

Mysql rpm安装包:

https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.20-1.el6.x86_64.rpm-bundle.tar

Mysql驱动包:

https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.45.zip

2.1.4下载jdk-8u112-linux-x64.tar.gz

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html

2.2Ambari安装准备工作(所有机器)

2.2.1 配置主机名

为了后续操作方便,确保机器的hostname是我们想要的。拿192.168.90.43这台机器为例,用root账户登录

修改主机名:vim /etc/hostname

把原来的内容修改为 master

类似的,将其他两个机器,分别改名为slave1slave2

每当RedHat安装成功时,我们的机器名都是默认的,但为了以后集群中能够容易分辨各台服务器,需要给每台机器取个不同的名字。

修改网络配置文件:vim /etc/sysconfig/network

 HOSTNAME后面的值改为想要设置的主机名,然后重启即可。 

1. # Created by anaconda

2. NETWORKING=yes

3. HOSTNAME=master

类似的,将其他两个机器,分别改名为slave1slave2

配置所有节点:

修改/etc/hosts文件

修改这3台机器的/etc/hosts文件,在文件中添加以下内容: 

1. 192.168.168.200  master

2. 192.168.168.201  slave1

3. 192.168.168.202  slave2

配置完成后使用ping命令检查这3个机器是否相互ping得通,以master为例,

执行命令:ping  slave1 

执行命令:ping  slave2     

 ping得通,说明机器是互联的,而且hosts配置也正确。

2.2.4关闭每台机器的防火墙

1. #停止iptables

2. Service iptables stop 

3. #禁止iptables开机启动

4. Chkconfig iptables off    

2.2.5关闭每台机器的Selinux

注意,在集群的每个节点,都要关闭Selinux

使用sestatus -v 命令,查看Selinux状态。

如果不是disable状态,编辑/etc/sysconfig/selinux 文件

vi /etc/sysconfig/selinux

把里边的一行改为

SELINUX=disabled

保存,然后重启机器。

2.2.6关闭每台机器的THP服务(CentOS7没有redhat_transparent_hugepage所以只要关闭上面两个即可)

echo never > /sys/kernel/mm/redhat_transparent_hugepage/enable

echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrage

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

Echo never > /sys/kernel/mm/transparent_hugepage/defrage

2.2.7配置每台机器的无密码登陆(SSH)

给3个机器生成秘钥文件

master为例,执行命令,生成空字符串的秘钥(后面要使用公钥),命令是:

1. [root@master .ssh]# ssh-keygen  -t   rsa   -P  ''

      因为我现在用的是root账户,所以秘钥文件保存到了/root/.ssh/目录内,可以使用命令查看,命令是:

1. ls   /root/.ssh/

使用同样的方法为slave1slave2生成秘钥(命令完全相同,不用做如何修改)

1. [root@slave1 ~]# ssh-keygen  -t   rsa   -P  ''

1. [root@slave2 ~]# ssh-keygen  -t   rsa   -P  ''

登录master机器,输入命令:

1. [root@master ~]# cd /root/.ssh

2. [root@master .ssh]# cp id_rsa.pub authorized_keys

id_rsa.pub公钥拷贝重命名为authorized_keys文件。

登录slave1slave2机器,将其他主机的公钥文件内容都拷贝到master主机上的authorized_keys文件中,命令如下:

1. #登录slave1,将公钥拷贝到masterauthorized_keys

2. [root@slave1 ~]# ssh-copy-id -i master

1. #登录slave2,将公钥拷贝到masterauthorized_keys

2. [root@slave2 ~]# ssh-copy-id -i master

 

授权authorized_keys文件

登录master,.ssh目录下输入命令:

1. [root@master .ssh]# cd /root/.ssh

2. [root@master .ssh]# chmod 600 authorized_keys

authorized_keys文件复制到其他机器  

1. [root@master .ssh]# scp /root/.ssh/authorized_keys root@slave1:/root/.ssh/authorized_keys

2. [root@master .ssh]# scp /root/.ssh/authorized_keys root@slave2:/root/.ssh/authorized_keys

 

注意第一次ssh登录时需要输入密码,再次访问时即可免密码登录。

测试连接成功的情况:
在每台机器上机器上运行:

1. [root@master ~]# ssh master date

2. 2017 12 10 星期日 20:58:31 CST

3. [root@master ~]# ssh slave1 date

4. 2017 12 10 星期日 20:58:31 CST

5. [root@master ~]# ssh slave2 date

6. 2017 12 10 星期日 20:58:43 CST

至此,免密码登录已经设定完成!

2.2.8 同步时间

选择局域网中的一台机器作为ntp服务器,以master机器为例 

master机器上需安装并启动ntpd

1. [root@master ~]# service ntpd start

其他机器必须关闭ntpd

1. [root@slave1 ~]# service ntpd stop

 

1. [root@slave2 ~]# service ntpd stop

 修改master机器上的ntp服务器文件

1. Vim /etc/ntp.conf

添加以下配置:

1. server 127.127.1.0

2. fudge 127.127.1.0 stratum 8

注意:后面那个数字在0-15之间都可以,这样就将这台机器的本地时间作为ntp服务提供给客户端。

配置局域网内的其他机器:

1. vim /etc/ntp.conf

注释掉原来的外网时间服务器,添加master机器的IP 

server 192.168.90.43

 

Master机器上重启ntpd服务

1. [root@master ~]# service ntpd restart

等几分钟,让ntpd完成自身的时间同步。

可通过以下命令查看状态

1. watch ntpq -p

注意:第6reach达到17时就可以了,等待的时间是第5poll的秒数乘以5

其他机器上手动执行:

1. [root@slave1 ~]# ntpdate 192.168.90.43

2. 10 Dec 22:00:21 ntpdate[8854]: step time server 192.168.168.200 offset -86396.562366 sec

1. [root@slave2 ~]# ntpdate 192.168.90.43

2. 10 Dec 22:03:22 ntpdate[8781]: step time server 192.168.168.200 offset 172798.320537 sec

其他机器设置间隔任意时间同步的方法:

查看定时任务指令编写的大致要求

1. [root@slave1 ~]# cat /etc/crontab

2. SHELL=/bin/bash

3. PATH=/sbin:/bin:/usr/sbin:/usr/bin

4. MAILTO=root

5. HOME=/

6.  

7. # For details see man 4 crontabs

8.  

9. # Example of job definition:

10. # .---------------- minute (0 - 59)

11. # |  .------------- hour (0 - 23)

12. # |  |  .---------- day of month (1 - 31)

13. # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

14. # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

15. # |  |  |  |  |

16. # *  *  *  *  * user-name command to be executed

1. #添加一个新的定时任务

2. crontab -e

在弹出的新文件编辑框中输入:

1. */15 * * * * ntpdate 192.168.90.43

保存退出,会提示增加了一个新的任务,上面代表(每间隔15分钟向时间服务器192.168.90.43同步一次时间)

查看root用户的定时任务

1. [root@slave1 ~]# crontab -u root -

2. */15 * * * * ntpdate 192.168.90.43

2.3 搭建Yum源服务器

2.3.1安装yum

选择master服务器作为http服务器:

1. [root@master ~]# mkdir -/var/www/html

使用安装系统的ISO镜像文件CentOS-6.5-x86_64-bin-DVD1.iso

CentOS-6.5-x86_64-bin-DVD1.iso镜像复制到http服务器(选择master机器)的默认目录/var/www/html

1. [root@master ~]# cd /var/www/html

2. [root@master html]# ls

3. CentOS-6.5-x86_64-bin-DVD1.iso 

ISO文件挂载至文件夹/var/www/html/CentOS

1. [root@master html]# cd  /mnt 

2. [root@master html]# mount -o loop CentOS-6.5-x86_64-bin-DVD1.iso /var/www/html/CentOS 

(取消挂载umount /var/www/html/CentOS

查看文件夹/var/www/html/CentOScd/var/www/html/CentOS

---有内容就表示挂载上了

挂载完成后,进入/etc/yum.repos.d目录:

1. [root@master CentOS]# cd /etc/yum.repos.d/ 

 创建centos.repo:

[centos]

name=centos6.5

baseurl=file:///var/www/html/CentOS

enable=1

gpgcheck=0

修改CentOS-Base.repo,在每一组中添加一行如下内容:enabled=0

运行如下命令:

1. #清除yum的缓存、头文件、已下载的软件包等等

2. yum clean all

1. #重建yum缓存

2. yum makecache

1. #查看已启用的镜像源

2.  yum repolist all

ISO镜像yum源搭建OK!!!

centos.repoCentOS-Base.repo scp到另外两个机器

2.3.2安装http服务器

本文在集群机器中任选一台机器作为源服务器,以master机器为例

检查系统是否已经安装http服务 

1. [root@master ~]# which httpd

2. /usr/sbin/httpd

若没有出现上述/usr/sbin/httpd目录信息,则说明没有安装;如果有,则跳过该步骤!

1. #如果没有安装则执行

2. yum install httpd

若出现目录信息,且工作目录默认在/var/www/html

http服务使用80端口,检查端口是否占用

1. netstat -nltp | grep 80

如果有占用情况,安装完毕后需要修改http服务的端口号

1. vim /etc/httpd/conf/httpd.conf

 修改监听端口,Listen 80为其他端口

启动httpd服务器:

1. [root@master ~]# service httpd start

打开浏览器,访问http://192.168.90.43:80,能正确打开网页,服务正常启动

浏览器访问:http://192.168.168.200/CentOS/(能否访问)

2.3.3 制作离线源

AmbariHDPHDP-UTILS三个压缩包,提前下好

还有ambari.repohdp.repo文件也下载好。

将这三个AmbariHDP相关安装包复制到http服务器(这里我们选择master机器)的/var/www/html目录下,解压AmbariHDP相关rpm包,生成相应的目录:

1. [root@master ~]# cd /var/www/html

2. [root@master html]# ls 

目录说明:

ambari目录:包含ambari-serverambari-agentambari-log4jrpm

HDP目录:包含hadoop的生态圈的组件,比如hdfshivehbasemahout

HDP-UTILS-1.1.0.21目录:包含HDP平台所包含的工具组件等,比如nagiosgangliapuppet

2.3.4 使用yum

复制ambari.repo文件到/etc/yum.repos.d(该步骤在master机器上执行)

1. [root@master 2.1.0]# cp ./ambari.repo /etc/yum.repos.d/

复制hdp.repo文件到/etc/yum.repos.d(该步骤在master机器上执行)

1. [root@master 2.3.0.0]# cp ./hdp.repo /etc/yum.repos.d/

配置/etc/yum.repos.d目录下的ambari.repohdp.repo文件(该步骤在master机器上执行)

1. [root@master 2.3.0.0]# cd  /etc/yum.repos.d

编辑ambari.repo文件:

1. [root@master yum.repos.d]# vim ambari.repo 

修改配置为如下内容:

1. #VERSION_NUMBER=2.4.2.0-136

2.  

3. [Updates-ambari-2.4.2.0]

4. name=ambari-2.4.2.0 - Updates

5. baseurl=http://192.168.90.43/ambari/centos6/2.4.2.0

6. gpgcheck=1

7. gpgkey=http://192.168.90.43/ambari/centos6/2.4.2.0/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins

8. enabled=1

9. priority=1

10.  

编辑hdp.repo文件:

1. [root@master yum.repos.d]# vim hdp.repo

修改配置为如下内容:

1. #VERSION_NUMBER=2.3.0.0-2557

2. [HDP-2.5.3.0]

3. name=HDP Version - HDP-2.5.3.0

4. baseurl=http://192.168.90.43/HDP/centos6

5. gpgcheck=1

6. gpgkey=http://192.168.90.43/HDP/centos6/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins

7. enabled=1

8. priority=1

9.  

10. [HDP-UTILS-1.1.0.21]

11. name=HDP Utils Version - HDP-UTILS-1.1.0.21

12. baseurl=http://192.168.90.43/HDP-UTILS-1.1.0.21/repos/centos6

13. gpgcheck=1

14. gpgkey=http://192.168.90.43/HDP-UTILS-1.1.0.21/repos/centos6/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins

15. enabled=1

16. priority=1

2.3.5 复制repo文件到其他机器的/etc/yum.repo.d/目录下

2.4 安装MySQL(为了后续装Hive,Oozie

2.4.1驱动包存放目录

mysql-connector-java.jar驱动包存放位置:/usr/share/java

更改权限chmod 777

2.4.2卸载旧的mysql

查找以前是否安装有mysql

1. [root@master ~]# rpm -qa|grep -i mysql

如果木有结果,可以进行下一步的mysql数据库安装

如果出现mysql的相关文件,说明已经安装

停止mysql服务、删除之前安装的mysql

删除命令: rpm -e --nodeps包名

1. [root@master ~]# rpm ---nodeps mysql-community-client-5.7.20-1.el6.x86_64

2. [root@master ~]# rpm ---nodeps mysql-community-server-5.7.20-1.el6.x86_64

3. [root@master ~]# rpm ---nodeps mysql-community-devel-5.7.20-1.el6.x86_64

4. [root@master ~]# rpm -qa|grep -i mysql

如果存在CentOS自带的mysql-libs相关jar包,卸载命令:

1. rpm -ev --nodeps mysql-libs*

查找旧版本mysql的目录,并且删除旧版本mysql的文件和库:

1. [root@master yum.repos.d]# find / -name mysql

2. /etc/selinux/targeted/active/modules/100/mysql

3. /var/www/html/HDP-UTILS-1.1.0.20/repos/centos7/mysql

4. /usr/lib64/mysql

5. /usr/share/mysql

 删除对应的mysql目录:

1. [root@master ~]# rm -rf /usr/lib64/mysql

2. [root@master ~]# rm -rf /usr/share/mysql

删除配置文档

1. [root@master ~]# rm -rf /etc/my.cnf

再次查找机器是否安装mysql

1. [root@master ~]# rpm -qa|grep -i mysql

显示无结果,说明已经卸载彻底,接下来直接安装mysql即可!

安装好mysql创建ambarihiveoozie数据库和用户:

>mysql

安装完成后创建ambari数据库及用户,登录root用户执行下面语句:

create database ambari character set utf8 ;  
CREATE USER 'ambari'@'%'IDENTIFIED BY 'Ambari-123';
GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'%';
FLUSH PRIVILEGES;

如果要安装Hive,再创建hive数据库和用户再执行下面的语句:

create database hive character set utf8 ;  
CREATE USER 'hive'@'%'IDENTIFIED BY 'Hive-123';
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%';
FLUSH PRIVILEGES;

如果要安装Oozie,再创建Oozie数据库和用户 再执行下面的语句:

create database oozie character set utf8 ;  
CREATE USER 'oozie'@'%'IDENTIFIED BY 'Oozie-123';
GRANT ALL PRIVILEGES ON *.* TO 'oozie'@'%';
FLUSH PRIVILEGES;

2.4.3卸载CentOS自带的mariadb

查看现有的包mariadb

1. [root@master yum.repos.d]# rpm -qa|grep -i mariadb

2. mariadb-libs-5.5.52-1.el7.x86_64

如果存在,删除全部包

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

2.5 Ambari安装过程

2.5.1 在各个节点上清空缓存文件  

1. [root@master .ssh]#  yum clean all

1. [root@slave1 ~]# yum clean all

1. [root@slave2 ~]# yum clean all

2.5.2 master服务器上的软件包信息缓存到本地

目的:提高搜索安装软件的速度

1. [root@master .ssh]# yum makecache

1. [root@slave1 .ssh]# yum makecache

1. [root@slave2 .ssh]# yum makecache

为了检验文件是否配置正确,可以使用

1. [root@master .ssh]# yum search ambari-agent

2. [root@master .ssh]# yum search Oozie

3. [root@master .ssh]# yum search gangli

1. [root@slave1 .ssh]# yum search ambari-agent

2. [root@slave1 .ssh]# yum search Oozie

3. [root@slave1 .ssh]# yum search gangli

1. [root@slave2 .ssh]# yum search ambari-agent

2. [root@slave2 .ssh]# yum search Oozie

3. [root@slave2 .ssh]# yum search gangli

如果配置有问题,就会出现找不到文件包的问题。

察看仓库列表:

1. [root@master .ssh]# yum repolist

1. [root@slave1 .ssh]# yum repolist

1. [root@slave2 .ssh]# yum repolist

如果可以看到Ambari的对应版本的安装包列表,说明公共库已配置成功。

然后就可以安装 Ambaripackage了。执行下面的步骤安装 Ambari Server

2.5.3  Ambari Server安装

安装之前先准备JDK1.8

1. [root@master ~]# mkdir -/usr/java

jdk包解压/usr/java目录下面:

注意:将jdk目录下的bin更改成可执行权限!!

master下面的jdk复制到slave1slave2节点:

1. [root@slave1 ~]# mkdir -/usr/java

1. [root@slave2 ~]# mkdir -/usr/java

1. [root@master java]# scp -/usr/java/jdk1.8.0_121 root@slave1:/usr/java

2. [root@master java]# scp -/usr/java/jdk1.8.0_121 root@slave2:/usr/java

先卸载

1. [root@master .ssh]# yum erase ambari-server

再安装,这个命令同时安装了PostgreSQL:

1. [root@master .ssh]# yum install ambari-server

在出现的界面输入y,继续安装到成功

mysql-connector-java.jar复制到/var/lib/ambari-server/resources目录下

cp /usr/share/java/mysql-connector-java.jar /var/lib/ambari-server/resources/mysql-jdbc-driver.jar

编辑ambari.properties

vi /etc/ambari-server/conf/ambari.properties

添加server.jdbc.driver.path=/usr/share/java/mysql-connector-java.jar

Ambari数据库脚本导入到数据库

如果使用自己定义的数据库,必须在启动Ambari服务之前导入Ambarisql脚本

Ambari用户(上面设置的用户)登录mysql

[root@namenode1~]# mysql -u root -p

mysql>use ambari

mysql>source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql


待安装完成后,便需要对 Ambari Server做一个简单的配置。执行下面的命令

1. [root@master .ssh]# ambari-server  setup

如果还没有关闭SELinux,执行这个命令的过程中会提示,选择y,即可临时关闭。

[root@master ~]# ambari-server setup

Usingpython  /usr/bin/python

Setupambari-server

CheckingSELinux...

SELinuxstatus is 'disabled'

Customizeuser account for ambari-server daemon [y/n] (n)? y

Enter useraccount for ambari-server daemon (root):

Adjustingambari-server permissions and ownership...

Checkingfirewall status...

CheckingJDK...

[1] OracleJDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8

[2] OracleJDK 1.7 + Java Cryptography Extension (JCE) Policy Files 7

[3] CustomJDK

==============================================================================

Enter choice(1): 3

WARNING: JDKmust be installed on all hosts and JAVA_HOME must be valid on all hosts.

WARNING: JCEPolicy files are required for configuring Kerberos security. If you plan to useKerberos,please make sure JCE Unlimited Strength Jurisdiction Policy Files arevalid on all hosts.

Path toJAVA_HOME: /usr/java/jdk1.8.0_121

ValidatingJDK on Ambari Server...done.

Completingsetup...

2.设置数据库,Ambari默认使用的是PostgreSQL改为mysql数据库Configuringdatabase...

Enteradvanced database configuration [y/n] (n)? y

Configuringdatabase...

==============================================================================

Choose oneof the following options:

[1] -PostgreSQL (Embedded)

[2] - Oracle

[3] - MySQL/ MariaDB

[4] -PostgreSQL

[5] -Microsoft SQL Server (Tech Preview)

[6] - SQLAnywhere

[7] - BDB

==============================================================================

Enter choice(1): 3

Hostname(localhost): 

Port (3306):

Databasename (ambari):

Username(ambari):

EnterDatabase Password (bigdata):(自己创建的ambari的数据库密码)

Re-enterpassword:

Configuringambari database...

Copying JDBCdrivers to server resources...

Configuringremote database connection properties...

WARNING:Before starting Ambari Server, you must run the following DDL against thedatabase to create the schema:/var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql

Proceed withconfiguring remote database connection properties [y/n] (y)? y

Extractingsystem views...

.....ambari-admin-2.4.1.0.22.jar

......

Adjustingambari-server permissions and ownership...

AmbariServer 'setup' completed successfully.


设置驱动:

[root@master ~]# ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java-5.1.45-bin.jar 

2.5.5启动Ambari界面

简单的 setup配置完成后。就可以启动 Ambari了。运行下面的命令:

1. [root@master resources]#  ambari-server  start

2. (启动比较慢,多等一会。。。)

如下命令端口监听:

1. [root@master resources]# netstat -tnlp|grep java

如果8080端口监听了,表示启动正常。

如果没有正常监听,就查看日志/var/log/ambari-server/ambari-server.log,察看是否有错误,根据提示解决即可。

查看ambari-server状态

1. [root@master resources]# ambari-server status

查看ambari-server进程

1. # jps     # ps -ef|grep Ambari

2. [root@master resources]# ps -ef|grep Ambari


当成功启动 Ambari Server之后,便可以从浏览器登录,默认的端口为 8080如果端口被占用,可修改配置文件/etc/ambari-server/conf/ambari.properties,在文件中增加 client.api.port=<port_number>

以本文环境为例,在主机的浏览器的地址栏输入http://192.168.90.43:8080,登录密码为 admin/admin


至此,Ambari Server就安装完成了.

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值