1、hbase-2.1.0介绍及分布式集群部署、HA集群部署、验证、硬件配置推荐

Apache Hbase 系列文章

1、hbase-2.1.0介绍及分布式集群部署、HA集群部署、验证、硬件配置推荐
2、hbase-2.1.0 shell基本操作详解
3、HBase的java API基本操作(创建、删除表以及对数据的添加、删除、查询以及多条件查询)
4、HBase使用(namespace、数据分区、rowkey设计、原生api访问hbase)
5、Apache Phoenix(5.0.0-5.1.2) 介绍及部署、使用(基本使用、综合使用、二级索引示例)、数据分区示例
6、Base批量装载——Bulk load(示例一:基本使用示例)
7、Base批量装载-Bulk load(示例二:写千万级数据-mysql数据以ORCFile写入hdfs,然后导入hbase)
8、HBase批量装载-Bulk load(示例三:写千万级数据-mysql数据直接写成Hbase需要的数据,然后导入hbase)



本文主要介绍了hbase的功能、应用场景、分布式部署、HA部署验证以及一般的硬件推荐配置。
本文依赖hadoop、zookeeper内容,相关的内容请查看本作者关于hadoop和zookeeper专栏中的介绍。
本文分为三部分,即hbase介绍、集群部署和HA部署。

一、Hbase介绍

在这里插入图片描述

1、介绍

  • HBase是BigTable的开源java版本,是建立在HDFS之上,提供高可靠性、高性能、列存储、可伸缩、实时读写NoSQL的数据库系统。
  • HBase仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务。
  • 主要用来存储结构化和半结构化的松散数据。
  • 不支持join等复杂操作,不支持复杂的事务(行级的事务),HBase缺少RDBMS中的许多特性,例如带类型的列、二级索引以及高级查询语言等
  • Hbase中支持的数据类型:byte[]
  • Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加存储和处理能力
  • HBase中的表一般有这样的特点
    大:一个表可以有上十亿行,上百万列
    面向列:面向列(族)的存储和权限控制,列(族)独立检索
    稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏

2、HBase应用场景

  • 对象存储
    不少的头条类、新闻类的的新闻、网页、图片存储在HBase之中,一些病毒公司的病毒库也是存储在HBase之中
  • 时序数据
    HBase之上有OpenTSDB模块,可以满足时序类场景的需求
  • 推荐画像
    用户画像,是一个比较大的稀疏矩阵,蚂蚁金服的风控就是构建在HBase之上
  • 时空数据
    主要是轨迹、气象网格之类,滴滴打车的轨迹数据主要存在HBase之中,另外在技术所有大一点的数据量的车联网企业,数据都是存在HBase之中
  • CubeDB OLAP
    Kylin一个cube分析工具,底层的数据就是存储在HBase之中,不少客户自己基于离线计算构建cube存储在hbase之中,满足在线报表查询的需求
  • 消息/订单
    在电信领域、银行领域,不少的订单查询底层的存储,另外不少通信、消息同步的应用构建在HBase之上
  • Feeds流
    典型的应用就是xx朋友圈类似的应用,用户可以随时发布新内容,评论、点赞。
  • NewSQL
    之上有Phoenix的插件,可以满足二级索引、SQL的需求,对接传统数据需要SQL非事务的需求
  • 其他
    存储爬虫数据
    海量数据备份
    短网址

3、HBase特点

  • 强一致性读/写
    HBASE不是“最终一致的”数据存储,它非常适合于诸如高速计数器聚合等任务
  • 自动分块
    HBase表通过Region分布在集群上,随着数据的增长,区域被自动拆分和重新分布
  • 自动RegionServer故障转移
  • Hadoop/HDFS集成
    HBase支持HDFS开箱即用作为其分布式文件系统
  • MapReduce
    HBase通过MapReduce支持大规模并行处理,将HBase用作源和接收器
  • Java Client API
    HBase支持易于使用的 Java API 进行编程访问
  • Thrift/REST API
  • 块缓存和布隆过滤器
    HBase支持块Cache和Bloom过滤器进行大容量查询优化
  • 运行管理
    HBase为业务洞察和JMX度量提供内置网页。

二、集群部署(Hadoop HA Hbase非HA)

1、上传解压HBase安装包

#使用alanchan用户
#文件上传至/usr/local/bigdata

tar -xvzf hbase-2.1.0.tar.gz -C /usr/local/bigdata

[root@server1 bigdata]# ll
drwxr-xr-x 11 alanchan root      4096 923 16:01 hadoop-3.1.4
drwxr-xr-x  7 root     root      4096 928 09:44 hbase-2.1.0
-rw-r--r--  1 alanchan root 265818867 928 09:42 hbase-2.1.0.tar.gz

2、修改HBase配置文件

1)、hbase-env.sh

cd /usr/local/bigdata/hbase-2.1.0/conf
vim hbase-env.sh
#增加以下配置
export JAVA_HOME=/usr/java/jdk1.8.0_144
export HBASE_MANAGES_ZK=false

2)、hbase-site.xml

vim hbase-site.xml
------------------------------
<configuration>
        <!-- HBase数据在HDFS中的存放的路径,Hadoop是非HA环境部署或server1是非standy状态 -->
        <property>
            <name>hbase.rootdir</name>
            <value>hdfs://server1:8020/hbase</value>
        </property>
        
        <!-- 下面关于hbase.rootdir的配置是基于Hadoop 是HA模式的,
        如此配置的时候,还需要将hadoop的core-site.xml和hdfs-site.xml文件拷贝至Hbase的配置文件目录
        /usr/local/bigdata/hbase-2.1.0/conf下
        -->
        <property>
    		<name>hbase.rootdir</name>
    		<value>hdfs://HadoopHAcluster/hbase</value>
    	</property>
 
        <!-- Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面 -->
        <property>
            <name>hbase.cluster.distributed</name>
            <value>true</value>
        </property>
        <!-- ZooKeeper的地址 -->
        <property>
            <name>hbase.zookeeper.quorum</name>
            <value>server1:2118,server2:2118,server3:2118</value>
        </property>
        <!-- ZooKeeper快照的存储位置 -->
        <property>
            <name>hbase.zookeeper.property.dataDir</name>
            <value>/usr/local/bigdata/apache-zookeeper-3.7.1/data</value>
        </property>
        <!--  V2.1版本,在分布式情况下, 设置为false -->
        <property>
            <name>hbase.unsafe.stream.capability.enforce</name>
            <value>false</value>
        </property>
        
        <!--  16000与hadoop中的kms端口冲突 否则HMaster服务不能正常启动,报Errors$NativeIoException: bind(..) failed: 地址已在使用异常-->
    	<property>
    		<name>hbase.master.port</name>
    		<value>16100</value>
    	</property>
</configuration>

3)、配置环境变量

# 配置Hbase环境变量
vim /etc/profile

export HBASE_HOME=/usr/local/bigdata/hbase-2.1.0
export PATH=$PATH:${HBASE_HOME}/bin:${HBASE_HOME}/sbin
 
#加载环境变量
source /etc/profile

4)、复制jar包到lib

cp $HBASE_HOME/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar $HBASE_HOME/lib/

[root@server1 data]# cd $HBASE_HOME/lib/client-facing-thirdparty
[root@server1 client-facing-thirdparty]# ll
总用量 3552
-rw-rw-r-- 1 1000 1000   20437 76 2018 audience-annotations-0.5.0.jar
-rw-rw-r-- 1 1000 1000   61829 76 2018 commons-logging-1.2.jar
-rw-rw-r-- 1 1000 1000   15322 76 2018 findbugs-annotations-1.3.9-1.jar
-rw-rw-r-- 1 1000 1000 1475955 76 2018 htrace-core-3.1.0-incubating.jar
-rw-rw-r-- 1 1000 1000 1506370 76 2018 htrace-core4-4.2.0-incubating.jar
-rw-rw-r-- 1 1000 1000  489884 76 2018 log4j-1.2.17.jar
-rw-rw-r-- 1 1000 1000   41203 76 2018 slf4j-api-1.7.25.jar
-rw-rw-r-- 1 1000 1000   12244 76 2018 slf4j-log4j12-1.7.25.jar
[root@server1 client-facing-thirdparty]# pwd
/usr/local/bigdata/hbase-2.1.0/lib/client-facing-thirdparty
[root@server1 client-facing-thirdparty]# cp $HBASE_HOME/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar $HBASE_HOME/lib/

5)、修改regionservers文件

vim regionservers

server2
server3
server4

6)、分发安装包与配置文件

cd /usr/local/bigdata
scp -r hbase-2.1.0/ server2:$PWD
scp -r hbase-2.1.0/ server3:$PWD
scp -r hbase-2.1.0/ server4:$PWD

#有可能需要root权限
scp -r /etc/profile server2:/etc
scp -r /etc/profile server3:/etc
scp -r /etc/profile server4:/etc
 
在server2和server3、server4加载环境变量
source /etc/profile

7)、启动HBase

# 启动ZK
./start-zk.sh

# 启动hadoop
start-dfs.sh

# 启动hbase
start-hbase.sh

8)、 验证Hbase是否启动成功

# 启动hbase shell客户端
hbase shell
# 输入status
 
[alanchan@server1 conf]$ start-hbase.sh
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hadoop-3.1.4/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hbase-2.1.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
running master, logging to /usr/local/bigdata/hbase-2.1.0/logs/hbase-alanchan-master-server1.out
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hadoop-3.1.4/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hbase-2.1.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
server4: running regionserver, logging to /usr/local/bigdata/hbase-2.1.0/bin/../logs/hbase-alanchan-regionserver-server4.out
server2: running regionserver, logging to /usr/local/bigdata/hbase-2.1.0/bin/../logs/hbase-alanchan-regionserver-server2.out
server3: running regionserver, logging to /usr/local/bigdata/hbase-2.1.0/bin/../logs/hbase-alanchan-regionserver-server3.out
[alanchan@server1 conf]$ hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hadoop-3.1.4/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hbase-2.1.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 2.1.0, re1673bb0bbfea21d6e5dba73e013b09b8b49b89b, Tue Jul 10 17:26:48 CST 2018
Took 0.0025 seconds                                                                                                                                                                                                                                                      
hbase(main):001:0> status
1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load
Took 0.4651 seconds  

在这里插入图片描述
至此,集群搭建完毕

9)、单独启停服务命令

#单独 启动 或 停止 HMaster、HRegionServer 的进程

hbase-daemon.sh start/stop master/regionserver

3、参考硬件配置

针对大概800TB存储空间的集群中每个Java进程的典型内存配置:
在这里插入图片描述
推荐:

  • Master机器要运行NameNode、ResourceManager、以及HBase HMaster,推荐24GB左右
  • Slave机器需要运行DataNode、NodeManager和HBase RegionServer,推荐24GB(及以上)
  • 根据CPU的核数来选择在某个节点上运行的进程数,例如:两个4核CPU=8核,每个Java进程都可以独立占有一个核(推荐:8核CPU)
  • 内存不是越多越好,在使用过程中会产生较多碎片,Java堆内存越大, 会导致整理内存需要耗费的时间越大

三、HBase高可用

1、HBase高可用简介

HBase的高可用配置其实就是HMaster的高可用。要搭建HBase的高可用,只需要再选择一个节点作为HMaster,在HBase的conf目录下创建文件backup-masters,然后再backup-masters添加备份Master的记录。一条记录代表一个backup master,可以在文件配置多个记录。

2、部署HBase高可用

1)、在hbase的conf文件夹中创建 backup-masters 文件

cd /usr/local/bigdata/hbase-2.1.0/conf
touch backup-masters

[alanchan@server1 conf]$ touch backup-masters
[alanchan@server1 conf]$ ll
总用量 48
-rw-r--r-- 1 alanchan root    0 928 14:55 backup-masters
-rw-r--r-- 1 alanchan root 2792 928 13:36 core-site.xml
-rw-r--r-- 1 alanchan root 1811 76 2018 hadoop-metrics2-hbase.properties
-rw-r--r-- 1 alanchan root 4271 76 2018 hbase-env.cmd
-rw-r--r-- 1 alanchan root  198 928 13:58 hbase-env.sh
-rw-r--r-- 1 alanchan root 2257 76 2018 hbase-policy.xml
-rw-r--r-- 1 alanchan root 1934 928 13:58 hbase-site.xml
-rw-r--r-- 1 alanchan root 4120 928 13:36 hdfs-site.xml
-rw-r--r-- 1 alanchan root 4977 76 2018 log4j.properties
-rw-r--r-- 1 alanchan root   23 928 14:08 regionservers
[alanchan@server1 conf]$ vi backup-masters 

2)、将server2添加到该文件backup-masters中

如果有几个备HMaster就写几个

vim backup-masters

server2

3)、将backup-masters文件分发到所有的服务器节点中

scp backup-masters server2:$PWD
scp backup-masters server3:$PWD
scp backup-masters server4:$PWD

[alanchan@server1 conf]$ scp backup-masters server2:$PWD
backup-masters                                                                                                                                                                                                                         100%    8     0.0KB/s   00:00    
[alanchan@server1 conf]$ scp backup-masters server3:$PWD
backup-masters                                                                                                                                                                                                                         100%    8     0.0KB/s   00:00    
[alanchan@server1 conf]$ scp backup-masters server4:$PWD
backup-masters 

4)、重新启动hbase

stop-hbase.sh
start-hbase.sh

#启动hbase
[alanchan@server1 conf]$ start-hbase.sh
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hadoop-3.1.4/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hbase-2.1.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
running master, logging to /usr/local/bigdata/hbase-2.1.0/logs/hbase-alanchan-master-server1.out
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hadoop-3.1.4/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hbase-2.1.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
server4: running regionserver, logging to /usr/local/bigdata/hbase-2.1.0/bin/../logs/hbase-alanchan-regionserver-server4.out
server3: running regionserver, logging to /usr/local/bigdata/hbase-2.1.0/bin/../logs/hbase-alanchan-regionserver-server3.out
server2: running regionserver, logging to /usr/local/bigdata/hbase-2.1.0/bin/../logs/hbase-alanchan-regionserver-server2.out
server2: running master, logging to /usr/local/bigdata/hbase-2.1.0/bin/../logs/hbase-alanchan-master-server2.out
#查看进程
[alanchan@server1 conf]$ jps
28048 ResourceManager
3953 NameNode
15154 QuorumPeerMain
8034 ApplicationHistoryServer
21331 HMaster
15687 KMSWebServer
22039 Jps
15368 JobHistoryServer
4590 DFSZKFailoverController
#验证hbase启动情况
[alanchan@server1 conf]$ hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hadoop-3.1.4/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hbase-2.1.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 2.1.0, re1673bb0bbfea21d6e5dba73e013b09b8b49b89b, Tue Jul 10 17:26:48 CST 2018
Took 0.0026 seconds  
#验证主备机  ,也可登录server2上查看进程情况                                                                                                                                                                                                                                                  
hbase(main):001:0> status
1 active master, 1 backup masters, 3 servers, 0 dead, 0.6667 average load
Took 0.4719 seconds                                                                                                                                                                                                                                                      
hbase(main):002:0> 

5)、查看webui,检查Backup Masters中是否有server2

http://server1:16010/master-status
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
http://server2:16010/master-status
在这里插入图片描述
在这里插入图片描述

6)、尝试杀掉server1节点上的master,验证是否能访问

[alanchan@server1 conf]$ kill 21331
[alanchan@server1 conf]$ jps
28048 ResourceManager
3953 NameNode
15154 QuorumPeerMain
8034 ApplicationHistoryServer
15687 KMSWebServer
15368 JobHistoryServer
17274 Jps
4590 DFSZKFailoverController
#验证hbase是否能正常运行
[alanchan@server1 conf]$ hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hadoop-3.1.4/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hbase-2.1.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 2.1.0, re1673bb0bbfea21d6e5dba73e013b09b8b49b89b, Tue Jul 10 17:26:48 CST 2018
Took 0.0024 seconds                                                                                                                                                                                                                                                      
hbase(main):001:0> status
1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load
Took 0.4764 seconds  

7)、单独启停服务命令

#单独 启动 或 停止 HMaster、HRegionServer 的进程
hbase-daemon.sh start/stop master/regionserver

[alanchan@server1 conf]$ hbase-daemon.sh start master
running master, logging to /usr/local/bigdata/hbase-2.1.0/logs/hbase-alanchan-master-server1.out
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hadoop-3.1.4/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hbase-2.1.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
[alanchan@server1 conf]$ jps
28048 ResourceManager
3953 NameNode
15154 QuorumPeerMain
8034 ApplicationHistoryServer
2470 HMaster
15687 KMSWebServer
15368 JobHistoryServer
2749 Jps
4590 DFSZKFailoverController
[alanchan@server1 conf]$ hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hadoop-3.1.4/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hbase-2.1.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 2.1.0, re1673bb0bbfea21d6e5dba73e013b09b8b49b89b, Tue Jul 10 17:26:48 CST 2018
Took 0.0025 seconds                                                                                                                                                                                                                                                      
hbase(main):001:0> status
1 active master, 1 backup masters, 3 servers, 0 dead, 0.6667 average load
Took 0.4340 seconds  
  • Hbase 对时间比较敏感,每个节点的时间不能相差太大,相差太大的话是没有办法正常启动

以上,完成了hbase的介绍、hbase非高可用与高可用的部署及验证。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一瓢一瓢的饮 alanchanchn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值