虚拟机中的Hadoop配置

索引


ps:最后修改与2020年4月16号

init关机

init是所有进程的祖先﹐它的进程号始终为1﹐所以发送TERM信号给init会终止所有的

用户进程﹑守护进程等。shutdown 就是使用这种机制。init定义了8个运行级别(runlevel),

init 0为关机﹐init 1为重启。关于init可以长篇大论﹐这里就不再叙述。另外还有

telinit命令可以改变init的运行级别﹐比如﹐telinit -iS可使系统进入单用户模式﹐

并且得不到使用shutdown时的信息和等待时间。

克隆centos虚拟机,网卡冲突

当我们克隆centos虚拟机无法正常获取IP地址,重启网卡也提示Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization. [FAILED]

1.这是因为克隆的机器没有正确的mac,UUID信息冲突导致的,首先将/etc/udev/rules.d/70-persistent-net.rules文件清空:

echo "">/etc/udev/rules.d/70-persistent-net.rules

2.然后将网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0的uuidhwaddr这两行删除:

3.执行reboot命令,重启系统

shell脚本删除文件中的某一行

#!copy/bin/sh
myfile=test.txt
startLine=3
lineCnt=4
let endLine="startLine + lineCnt - 1"
sed -i $startLine','$endLine'd' $myfile

startLine 表示百开始行度的行问号

lineCnt 表示总共答要删除的行数

不固定到行号,比如我要删除带adc字符串的某一行以及后面4行

#!/bin/sh
myfile=test.txt
startLine=`sed -n '/adc/=' $myfile` #先计算带adc字符串行的行号
lineAfter=4
let endLine="startLine + lineAfter"
sed -i $startLine','$endLine'd' $myfile


或者

#!/bin/sh
myfile=test.txt
lineAfter=4
awk -v n=$lineAfter '{if($0~/adc/)for(i=1;i<=n+1;i++)getline;print}' $myfile >tmp
mv -f tmp $myfile

HDFS设计目标

1.自动快速检测应对硬件错误

2.流式访问数据

3.移动计算比移动数据本身更划算

4.简单一致性模型

5.异构平台可移植

HDFS的特点:

优点:

(一)高可靠性: Hadoop按位存储和处理数据的能力值得人们信赖;
(二)高扩展性: Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
(三)高效性: Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
(四)高容错性: Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

缺点:

(一)不适合低延迟数据访问。
(二)无法高效存储大量小文件。
(三)不支持多用户写入及任意修改文件。

集群简介

HADOOP集群 具体来说包含两个集群: HDFS集群和YARN集群, 两者逻辑上分 离,但物理上常在一起

HDFS集群负责海量数据的存储,集群中的角色主要有:

Name Node、 Datanode、 Secondarynamenode

YARN集群负责海量数据运算时的资源调度,集群中的角色主要有

Resourcemanager、 Nodemlanager

我们以3节点为例进行搭建,角色分配如下:

hadoop01NameNodeDataNodeResourceManager
hadoop02SecondaryNameNodeDataNodeNodeManager
hadoop03-DataNodeNodeManager
hadoop01hadoop02hadoop03
HDFSNameNode DataNodeDataNodeSecondaryNameNode DataNode
YARNNodeManagerResourceManager NodeManagerNodeManager
/etc/sysconfig/network修改ip地址
NETWORKING=yes
HOSTNAME=hadoop01
hostname=hadoop01
192.168.1.30

可以共享的文件:

/etc/sysconfig/network   (修改部分)并执行hostname 主机名

/etc/sysconfig/network-scripts/ifcfg-eth0      (修改部分)

vi /etc/hosts

/etc/profile

安装Hadoop

安装步骤

linux的环境准备

修改网卡信息 vi /etc/udev/rules.d/70-persistent-net.rules 只在克隆机上操作这一步

1. 修改ip地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0



ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.91.3
GATEWAY=192.168.91.2
NETMASK=255.255.255.0
DNS1=8.8.8.8

systemctl restart network

service network restart
2. 改主机映射
  • 临时修改:hostname 主机名
  • 永久修改:vi /etc/sysconfig/network
  • NETWORKING=yes
  • HOSTNAME=your_hostname
3. 修改ip映射
  • vi /etc/hosts

hadoop01 192.168.1.30
hadoop02 192.168.1.31
hadoop03 192.168.1.32

4. 关闭防火墙

service iptables status

sudo service iptables stop 或
systemctl stop firewalld

#查看防火墙开机启动状态 chkconfig iptables --list

设置防火墙开机不启动 chkconfig iptables off

现在虚拟机内尝试访问hadoop002:50070,如果访问不了,估计是sellinux的问题执行以下命令setenforce 0( 设置为permissive模式)接着重新在虚拟机内访问,此时应该可以正常访问了

临时关闭SELinux:setenforce 0
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。
临时生效:
命令临时生效:
setenforce 0 (临时生效可以直接用setenforce 0 )
      	1 启用
      	0 告警,不启用
永久生效:
# 操作前先备份
cp /etc/selinux/config /etc/selinux/config.bak
cat /etc/selinux/config
#   SELINUX= can take one of these three values:
#   enforcing - SELinux security policy is enforced.
#   permissive - SELinux prints warnings instead of enforcing.
#   disabled - No SELinux policy is loaded.
# 更改setlinux级别
sed -i 's/SELINUX=enforcing/\SELINUX=permissive/' /etc/selinux/config
   ==> vim ``/etc/selinux/config/  --> SELINUX=enforcing[效果同上]
  # SELINUX参数enforcing代表打开,disabled代表关闭
# 查看selinux状态:
getenforce

查看端口是否打开

ss -lp|grep 50070

5. 服务器系统设置
同步时间

法一

#手动同步集群各机器时间

date-s"2017-03-0303:03:03"

法二

#网络同步时间

yum install ntpdate

ntpdate cn.pool.ntp.org 或 ntpdate time.nist.gov

法三

#所有节点安装 chrony 服务。

yum install -y chrony

#Master 节点修改/etc/chrony.conf 文件,注释默认 NTP 服务器,指定上游公共 NTP 服务器,并允许其他节点同步时间。

[root@master ~]# sed -i 's/^server/#&/' /etc/chrony.conf
[root@master ~]# cat >> /etc/chrony.conf << EOF
local stratum 10
server master iburst
allow all
EOF

#Master 节点重重启 chronyd 服务并设为开机启动,开启网络时间同步功能。

[root@master ~]# systemctl enable chronyd && systemctl restart chronyd
[root@master ~]# timedatectl set-ntp true

#Node 节点修改/etc/chrony.conf 文件,指定内网 Master 节点为上游 NTP 服务器,重启服

务并设为开机启动。

[root@node ~]# sed -i 's/^server/#&/' /etc/chrony.conf
[root@node ~]# echo server 10.18.4.33 iburst >> /etc/chrony.conf //IP 为 master 节点地址
[root@node ~]# systemctl enable chronyd && systemctl restart chronyd

所有节点执行 chronyc sources 命令,查询结果中如果存在以“^*”开头的行,即说明已

经同步成功。

# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
==================================================================
^* master 10 6 77 7 +13ns[-2644ns] +/- 13us

法四(推荐)

\1. 时间服务器配置(必须root用户)

(1)检查ntp是否安装

[root@hadoop102 桌面]# rpm -qa|grep ntp

ntp-4.2.6p5-10.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64

(2)修改ntp配置文件

[root@hadoop102 桌面]#vi /etc/ntp.conf

修改内容如下

a)修改1(授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间)

**#**restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

​ b)修改2(集群在局域网中,不使用其他互联网上的时间)

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst为

#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)

server 127.127.1.0
fudge 127.127.1.0 stratum 10

(3)修改/etc/sysconfig/ntpd 文件

[root@hadoop102 桌面]# vim /etc/sysconfig/ntpd

增加内容如下(让硬件时间与系统时间一起同步)

SYNC_HWCLOCK=yes

(4)重新启动ntpd服务

[**root**@hadoop102 桌面]# service ntpd status

ntpd 已停

[**root**@hadoop102 桌面]# service ntpd start

正在启动 ntpd:                       [确定]

(5)设置ntpd服务开机启动

# chkconfig ntpd on

\2. 其他机器配置(必须root用户)

(1)在其他机器配置10分钟与时间服务器同步一次

[**root**@hadoop103桌面]# crontab -e

编写定时任务如下:

*/10 * * * * /usr/sbin/ntpdate hadoop102

(2)测试,修改任意机器时间

[**root**@hadoop103桌面]# date -s "2017-9-11 11:11:11"

(3)十分钟后查看机器是否与时间服务器同步

[**root**@hadoop103桌面]# date

说明:测试的时候可以将10分钟调整为1分钟,节省时间。

设置时区/时间/上海时间

法一

[root@esnode02 ~]# timedatectl set-timezone 'Asia/Shanghai'
[root@esnode02 ~]# date
Mon Apr  8 14:29:12 CST 2019

法二

修改时区

调整时区使用tzselect

[root@lyn ~]# hwclock

Tue 13 Nov 2018 11:52:26 PM AST  -0.198205 seconds

[root@lyn ~]# tzselect

Please identify a location so that time zone rules can be set correctly.

Please select a continent or ocean.

 1) Africa

 2) Americas

 3) Antarctica

 4) Arctic Ocean

 5) Asia

 6) Atlantic Ocean

 7) Australia

 8) Europe

 9) Indian Ocean

10) Pacific Ocean

11) none - I want to specify the time zone using the Posix TZ format.

#? 5

Please select a country.

 1) Afghanistan           18) Israel                35) Palestine

 2) Armenia               19) Japan                 36) Philippines

 3) Azerbaijan            20) Jordan                37) Qatar

 4) Bahrain               21) Kazakhstan            38) Russia

 5) Bangladesh            22) Korea (North)         39) Saudi Arabia

 6) Bhutan                23) Korea (South)         40) Singapore

 7) Brunei                24) Kuwait                41) Sri Lanka

 8) Cambodia              25) Kyrgyzstan            42) Syria

 9) China                 26) Laos                  43) Taiwan

10) Cyprus                27) Lebanon               44) Tajikistan

11) East Timor            28) Macau                 45) Thailand

12) Georgia               29) Malaysia              46) Turkmenistan

13) Hong Kong             30) Mongolia              47) United Arab Emirates

14) India                 31) Myanmar (Burma)       48) Uzbekistan

15) Indonesia             32) Nepal                 49) Vietnam

16) Iran                  33) Oman                  50) Yemen

17) Iraq                  34) Pakistan

#? 9

Please select one of the following time zone regions.

1) east China - Beijing, Guangdong, Shanghai, etc.

2) Heilongjiang (except Mohe), Jilin

3) central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.

4) most of Tibet & Xinjiang

5) west Tibet & Xinjiang

#? 1 

The following information has been given: 

        China

        east China - Beijing, Guangdong, Shanghai, etc.
 
Therefore TZ='Asia/Shanghai' will be used.

Local time is now:      Wed Nov 14 11:52:47 CST 2018.

Universal Time is now:  Wed Nov 14 03:52:47 UTC 2018.

Is the above information OK?

1) Yes

2) No

#? 1

 You can make this change permanent for yourself by appending the line

        TZ='Asia/Shanghai'; export TZ

to the file '.profile' in your home directory; then log out and log in again.

 
Here is that TZ value again, this time on standard output so that you

can use the /usr/bin/tzselect command in shell scripts:

Asia/Shanghai

注:修改profile文件,添加以下两行:

TZ=‘Asia/Shanghai’;

export TZ

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

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

[root@lyn ~]# date

Wed Nov 14 11:56:16 CST 2018

由此发现,时区由AST 变成了CST。CST :中国标准时间

拓展:修改时间

注:linux系统启动时,系统时间同步硬件时间,如果只修改系统时间,重启后系统时间就会变成硬件时间。

例如,现在要求设置系统时间为2018-11-14 10:45:35

(1),使用date查看系统时间。

[root@lyn ~]# date

Wed Nov 14 18:29:43 CST 2018

(2),查看硬件时间,使用命令hwclock。

[root@lyn ~]# hwclock

Wed 14 Nov 2018 06:29:41 PM CST  -0.557725 seconds

(3),调整时间为要求的时间。

方法一:先设置系统时间,再根据系统时间同步硬件时间。

[root@lyn ~]# date -s 11/14/2018

Wed Nov 14 00:00:00 CST 2018

[root@lyn ~]# date -s 10:48:50

Wed Nov 14 10:48:50 CST 2018

[root@lyn ~]# hwclock --systohc  ##使用系统时间同步硬件时间

[root@lyn ~]# hwclock

Wed 14 Nov 2018 10:49:33 AM CST  -0.756860 seconds

方法二:先设置硬件时间,再根据硬件时间同步系统时间,或者重启系统。

[root@lyn ~]# hwclock --set --date="11/14/2018 10:56:35"

[root@lyn ~]# hwclock

Wed 14 Nov 2018 10:56:44 AM CST  -0.709765 seconds

[root@lyn ~]# hwclock --hctosys  ##使用硬件时间同步系统时间

[root@lyn ~]# date

Wed Nov 14 10:57:11 CST 2018
6. 配置环境变量

卸载 openjdk

rpm -qa | grep java

rpm e nodeps xxxxxxxxxxxxxxxxxxx

7. 编译 hadoop:

1/程序当中有一部分跟系统环境息息相关(文件读写win还是linux6432)

​ 要结合具体的系统环境下载源码进行编译

2/当需要自定义源码当中的某些组件的时候 需要修改源码 然后要重新编译成安装包

上边是linux的环境准备 下边是hadoop环境配置

修改Hadoop相关配置文件(重点)

1.都要上传jdk,hadoop安装包到/opt/software下,解压

scp /Volumes/zjSD/大二下学期/数据仓库原理与应用/完全分布式搭建全流程/hadoop-2.7.1.tar.gz  root@192.168.1.30:/root/data



scp /Volumes/zjSD/大二下学期/数据仓库原理与应用/完全分布式搭建全流程/jdk-8u60-linux-x64.gz root@192.168.1.30:/root/data





tar -zxvf /opt/software/hadoop-2.7.1.tar.gz
tar -zxvf /opt/software/jdk-8u60-linux-x64.gz

环境变量:

 /etc/profile

export JAVA_HOME=/opt/software/jdk1.8.0_60
export HADOOP_HOME=/opt/software/hadoop-2.7.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:

source /etc/profile

2.修改配置文件先修改 /hadoop2.7.1/etc/hadoop/hadoop-env.sh加上JAVA_HOME的路径 /opt/software/jdk1.8.0_60/

sudo cat >> /etc/profile << EOF

JAVA_HOME=/root/data/jdk1.8.0_60
HADOOP_HOME=/root/data/hadoop-2.7.1
PATH=$PATH:/root/data/jdk1.8.0_60/bin:/root/data/hadoop-2.7.1/sbin:/root/data/hadoop-2.7.1/bin
EOF


source  /etc/profile

刚定义的变量 不识别,不能引用 刚定义的变量,所以编写时用绝对路径

配置好环境变量后,查看命令是否有效

hadoop -version

出现Error: No command named -version’ was found. Perhaps you meant hadoop version

原因:将hadoop version输成了hadoop -version。Java检验是用java -version 而hadoop是直接输入hadoop version。

单机模式

1 配置hadoop-env.sh
[atguigu@hadoop102 hadoop]$ vi hadoop-env.sh

export JAVA_HOME=/root/data/jdk1.8.0_60

键入jps,发现没有进程,正常

hadoop fs -ls /

单机模式下的文件系统,就是本机的文件系统

伪分布式运行模式

预览
hadoop-env.sh
core-site.xml
hdfs-site.xml

(a)配置:hadoop-env.sh

Linux系统中获取JDK的安装路径:

$ echo $JAVA_HOME

/opt/module/jdk1.8.0_144

修改JAVA_HOME 路径:

export JAVA_HOME=/opt/module/jdk1.8.0_144

(b)配置:core-site.xml

  <!-- 指定HDFS中NameNode的地址  -->  
<property>  
    <name>fs.defaultFS</name>      
    <value>hdfs://hadoop101:9000</value>  
</property>     
<!-- 指定Hadoop运行时产生文件的存储目录  -->  
<property>    
    <name>hadoop.tmp.dir</name>    
    <value>/opt/module/hadoop-2.7.2/data/tmp</value>  
</property>  

(c)配置:hdfs-site.xml

  <!--  指定HDFS副本的数量 -->  
<property>    
    <name>dfs.replication</name>    
    <value>1</value>  
</property>  
完全分布式配置

预览
hadoop-env.sh
core-site.xml
hdfs-site.xml
slaves
yarn-env.sh
yarn-site.xml
mapred-env.sh
mapred-site.xml

1 配置hadoop-env.sh
[atguigu@hadoop102 hadoop]$ vi hadoop-env.sh

export JAVA_HOME=/root/data/jdk1.8.0_60

2 配置core-site.xml

[atguigu@hadoop01 hadoop]$ vi core-site.xml

​ tfs://淘宝文件系统

​ fill://本地文件系统,根据你运行机器(mac或win)上的文件系统动态获得

​ gfs://谷歌文件系统

在该文件中编写如下配置

<!-- 指定HDFS中NameNode的地址 -->
<property>
        <name>fs.defaultFS</name>
      <value>hdfs://hadoop01:9000</value>
</property>


<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/root/data1/hadoopdata/data/tmp</value>
</property>


<!-- 指定bufier的大小 -->
<property>
    <name>io. file.buffer.size</name>
    <value>4096</value>
</property>

3 配置hdfs-site.xml
[atguigu@hadoop102 hadoop]$ vi hdfs-site.xml
在该文件中编写如下配置

<!--副本数-->
<property>
        <name>dfs.replication</name>
        <value>3</value>
</property>

<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>hadoop02:50090</value>
</property>

<!--  指定HDFS块的大小设置,默认128-->
<property>
    <name>dfs.blocksize</name>
    <value>134217728</value>
    <description>
    假设寻址时间为10ms,理想的传输时间是寻址时间的100倍,即10ms/0.01=1000ms=1s.
    磁盘的传输速率100MB/s.  所以block大小为1s*100MB/s=100MB
    寻址时间  和  传输速率 是固定的。能控制的是传输时间和块的大小。当块的大小确定后,传输时间也就确定了。
    结论:影响块大小的是磁盘的传输速率。
    </description>
</property>

YARN的配置文件yarn-env.shyarn-site.xml

5 配置yarn-env.sh
[atguigu@hadoop102 hadoop]$ vi yarn-env.sh

export JAVA_HOME=/root/data/jdk1.8.0_60

6 配置yarn-site.xml
[atguigu@hadoop102 hadoop]$ vi yarn-site.xml
在该文件中增加如下配置

<!-- Reducer获取数据的方式 -->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的老大的ResourceManager的地址 -->
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop03</value>
</property>

MapReduce的配置文件mapred-env.shmapred-site.xml

7 配置mapred-env.sh
[atguigu@hadoop102 hadoop]$ vi mapred-env.sh

export JAVA_HOME=/root/data/jdk1.8.0_60

8 配置mapred-site.xml
[atguigu@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml

[atguigu@hadoop102 hadoop]$ vi mapred-site.xml
在该文件中增加如下配置

<!-- 指定MR运行在Yarn上 -->
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>

5.添加从节点(删除原来内容)

群起集群脚本(start-dfs.sh)都需要此配置文件

Vi slaves

hadoop01
hadoop02
hadoop03

分发到其他机器上

注意:检查绝对不能有空格,否者其他脚本读到此文件,也会读到空格


克制虚拟机就不用做这部分了

6.分发安装包

scp -r /opt/software/hadoop-2.7.1/ hadoop02:/opt/software/
scp -r /opt/software/hadoop-2.7.1/ hadoop03:/opt/software/
scp -r /opt/software/jdk1.8.0_60/ hadoop02:/opt/software/
scp -r /opt/software/jdk1.8.0_60/ hadoop03:/opt/software/

7.修改02,03机器上vi /etc/profifile文件并配置HADOOP_HOME,JAVA_HOME

export JAVA_HOME=/opt/software/jdk1.8.0_60
export HADOOP_HOME=/opt/software/hadoop-2.7.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:



source /etc/profile

8.ssh免密登录:

hadoop的群起脚本需要ssh免密登录

安装ssh

yum list | grep ssh 搜索ssh的安装软件包
yum -y install openssh-clients.x86_64  安装ssh客户端(每台机器都需要安装)

生成秘钥

ssh-keygen -t rsa   生成秘钥对
ssh-copy-id hadoop01   将公钥拷贝给其他的机器(其他的机器需要安装ssh)
ssh-copy-id hadoop02
ssh-copy-id hadoop03

注意:在namenode和ResourceManager节点上都要配置免密登录。因为他们要管理其他节点。

9.需要格式化 namenode 在hadoop01

$ bin/hdfs namenode -format
开启hdfs集群
start-dfs.sh 

开启yarn集群,(必须在ResourceManager节点上执行,否者报错)
start-yarn.sh

stop-dfs.sh 停止集群
xcall.sh jps	查看集群所有进程

sbin目录下的文件

distribute-exclude.sh start-all.cmd stop-balancer.sh
hadoop-daemon.sh start-all.sh(过时) stop-dfs.cmd
hadoop-daemons.sh start-balancer.sh stop-dfs.sh
hdfs-config.cmd start-dfs.cmd stop-secure-dns.sh
hdfs-config.sh start-dfs.sh stop-yarn.cmd
httpfs.sh start-secure-dns.sh stop-yarn.sh
kms.sh start-yarn.cmd yarn-daemon.sh
mr-jobhistory-daemon.sh start-yarn.sh yarn-daemons.sh
refresh-namenodes.sh stop-all.cmd
slaves.sh stop-all.sh

http://hadoop01:50070/
访问webUi


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值