第一章:开始进入Hbase--Apache HBase TM Reference Guide

介绍

HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

快速开始-独立HBase

本节介绍单节点独立HBase的设置。 独立实例具有所有HBase守护程序 - Master,RegionServers和ZooKeeper - 在单个JVM中运行,持久保存到本地文件系统。 这是我们最基本的部署配置文件。 我们将向您展示如何使用hbase shell CLI在HBase中创建表,在表中插入行,对表执行放置和扫描操作,启用或禁用表,以及启动和停止HBase。

除了下载HBase,此过程应该不到10分钟。

JDK版本要求

HBase要求安装JDK。 有关支持的JDK版本的信息,请参阅Java(第二章内容)。

开始使用HBase

过程:在独立模式下下载,配置和启动HBase

  1. 从此Apache下载镜像列表中选择一个下载站点。 单击建议的顶部链接。 这将带您进入HBase Releases的镜像。 单击名为stable的文件夹,然后将以.tar.gz结尾的二进制文件下载到本地文件系统。 暂时不要下载以src.tar.gz结尾的文件。

  2. 解压缩下载的文件,然后切换到新创建的目录。


     $ tar xzvf hbase-3.0.0-SNAPSHOT-bin.tar.gz
     $ cd hbase-3.0.0-SNAPSHOT/
  1. 在启动HBase之前,必须设置JAVA_HOME环境变量。 为了简化这一过程,HBase允许您在conf / hbase-env.sh文件中进行设置。 您必须找到计算机上安装Java的位置,找到它的一种方法是使用whereis java命令。 获得位置后,编辑conf / hbase-env.sh文件并取消注释以#export JAVA_HOME =开头的行,然后将其设置为Java安装路径。

hbase-env.sh中提取的示例,其中设置了JAVA_HOME


# Set environment variables here.
# The java implementation to use.
export JAVA_HOME=/usr/jdk64/jdk1.8.0_112

  1. 编辑conf / hbase-site.xml,这是主要的HBase配置文件。 此时,您需要在本地文件系统上指定HBase和ZooKeeper写入数据并确认一些风险的目录。 默认情况下,在/ tmp下创建一个新目录。 许多服务器配置为在重新启动时删除/ tmp的内容,因此您应该将数据存储在其他位置。 以下配置将HBase的数据存储在hbase目录中,该目录位于名为testuser的用户的主目录中。 将标记粘贴到标记下面,在新的HBase安装中应该为空。

Standalone HBase的示例hbase-site.xml


        <configuration>
         <property>
           <name>hbase.rootdir</name>
           <value>file:///home/testuser/hbase</value>
         </property>
         <property>
           <name>hbase.zookeeper.property.dataDir</name>
           <value>/home/testuser/zookeeper</value>
         </property>
         <property>
           <name>hbase.unsafe.stream.capability.enforce</name>
           <value>false</value>
           <description>
             Controls whether HBase will check for stream capabilities (hflush/hsync).
             Disable this if you intend to run on LocalFileSystem, denoted by a
       rootdir
             with the 'file://' scheme, but be mindful of the NOTE below.
             WARNING: Setting this to false blinds you to potential data loss and
             inconsistent system state in the event of process and/or node failures.
       If
             HBase is complaining of an inability to use hsync or hflush it's most
             likely not a false positive.
           </description>
         </property>
       </configuration>

您不需要创建HBase数据目录。 HBase会为你做这件事。 如果您创建目录,HBase将尝试进行迁移,这不是您想要的。

上例中的hbase.rootdir指向本地文件系统中的目录。 'file://'前缀是我们表示本地文件系统的方式。 您应该将配置示例中的警告置于心脏。 在独立模式下,HBase利用Apache Hadoop项目的本地文件系统抽象。 这种抽象并不能提供HBase需要安全运行的耐久性承诺。 这适用于本地开发和测试用例,其中集群故障的成本得到很好的控制。 它不适合生产部署; 最终你会丢失数据。

要在现有的HDFS实例上安装HBase,请将hbase.rootdir设置为指向实例上的目录:例如HDFS://namenode.example.org:8020/ HBase的。 有关此变体的更多信息,请参阅下面有关HDFS上的独立HBase的部分。

  1. bin / start-hbase.sh脚本是一种启动HBase的便捷方式。 发出命令,如果一切顺利,将在标准输出中记录一条消息,显示HBase已成功启动。 您可以使用jps命令验证是否有一个名为HMaster的正在运行的进程。 在独立模式下,HBase在此单个JVM中运行所有守护程序,即HMaster,单个HRegionServer和ZooKeeper守护程序。 转到http:// localhost:16010以查看HBase Web UI。

Java需要安装并可用。 如果您收到错误,指示未安装Java,但它位于您的系统上(可能位于非标准位置),请编辑conf / hbase-env.sh文件并修改JAVA_HOME设置以指向包含bin的目录 / java在你的系统上。

过程:首次使用HBase

  1. 连接到HBase。

使用位于HBase安装的bin /目录中的hbase shell命令连接到正在运行的HBase实例。 在此示例中,省略了启动HBase Shell时打印的一些用法和版本信息。 HBase Shell提示符以>字符结尾。


$ ./bin/hbase shell
hbase(main):001:0>

  1. 显示HBase Shell帮助文本。

输入help并按Enter键,显示HBase Shell的一些基本用法信息,以及几个示例命令。 请注意,表名,行,列都必须用引号字符括起来。
3. 创建一个表。

使用create命令创建新表。 您必须指定表名和ColumnFamily名称。


hbase(main):001:0> create 'test', 'cf'
 0 row(s) in 0.4170 seconds
 => Hbase::Table - test

  1. 列出有关您的表的信息

使用list命令确认您的表存在

hbase(main):002:0> list 'test'
TABLE
test
1 row(s) in 0.0180 seconds
=> ["test"]

现在使用describe命令查看详细信息,包括配置默认值

hbase(main):003:0> describe 'test'
Table test is ENABLED                                                                                                                                            
test                                                                                                                                                             
COLUMN FAMILIES DESCRIPTION                                                                                                                                      
{NAME => 'cf', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false',
 DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY
 => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}            
1 row(s)
Took 0.1226 seconds 

  1. 将数据放入表中。

要将数据放入表中,请使用put命令。

hbase(main):004:0> put 'test', 'row1', 'cf:a', 'value1'
Took 0.0832 seconds                                                                                                                                              
hbase(main):005:0> put 'test', 'row2', 'cf:b', 'value2'
Took 0.0049 seconds                                                                                                                                              
hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value3'
Took 0.0047 seconds                                    

在这里,我们插入三个值,一次一个。 第一个插入位于第1行,列cf:a,值为value1。 HBase中的列由列族前缀组成,在此示例中为cf,后跟冒号,然后是列限定符后缀,在本例中为a。

  1. 一次扫描表格中的所有数据。

从HBase获取数据的一种方法是扫描。 使用scan命令扫描表中的数据。 您可以限制扫描,但目前,所有数据都已获取。

hbase(main):007:0> scan 'test'
ROW                                       COLUMN+CELL                                                                                                            
 row1                                     column=cf:a, timestamp=1559524797540, value=value1                                                                     
 row2                                     column=cf:b, timestamp=1559524804146, value=value2                                                                     
 row3                                     column=cf:c, timestamp=1559524811256, value=value3                                                                     
3 row(s)
Took 0.0235 seconds  

  1. 获取单行数据。

要一次获取一行数据,请使用get命令。

hbase(main):008:0> get 'test', 'row1'
COLUMN                                    CELL                                                                                                                   
 cf:a                                     timestamp=1559524797540, value=value1                                                                                  
1 row(s)
Took 0.0148 seconds  

  1. 禁用表格。

如果要删除表或更改其设置,以及在某些其他情况下,您需要先使用disable命令禁用该表。 您可以使用enable命令重新启用它。

hbase(main):009:0> disable 'test'
Took 0.7890 seconds                                                                                                                                              
hbase(main):010:0> enable 'test'
Took 0.8310 seconds   

如果您测试了上面的enable命令,请再次禁用该表:

hbase(main):011:0> disable 'test'
Took 0.7890 seconds 

  1. 删除表

要删除表,请使用drop/delete命令。


hbase(main):011:0> drop 'test'

ERROR: Table test is enabled. Disable it first.

Drop the named table. Table must first be disabled:
  hbase> drop 't1'
  hbase> drop 'ns1:t1'

Took 0.0243 seconds                                                                                                                                              
hbase(main):012:0> disable 'test'
Took 0.7363 seconds                                                                                                                                              
hbase(main):013:0> drop 'test'
Took 0.4503 seconds  
  1. 退出HBase Shell

要退出HBase Shell并断开与群集的连接,请使用quit命令。 HBase仍然在后台运行。

过程:停止HBase

  1. 与提供bin / start-hbase.sh脚本以便于启动所有HBase的方式相同守护进程,bin / stop-hbase.sh脚本会阻止它们。
 $ ./bin/stop-hbase.sh
     stopping hbase....................
     $

  1. 发出命令后,进程可能需要几分钟才能关闭。使用jps确保关闭HMaster和HRegionServer进程。
    上面已经向您展示了如何启动和停止HBase的独立实例。在下一节中,我们将简要介绍其他hbase部署模式。

伪分布式本地安装

通过快速启动独立模式后,您可以重新配置HBase以在伪分布式模式下运行。伪分布模式意味着HBase仍然在单个主机上完全运行,但每个HBase守护程序(HMaster,HRegionServer和ZooKeeper)作为一个单独的进程运行:在独立模式下,所有守护进程都在一个jvm进程/实例中运行。默认情况下,除非您按照快速入门中的说明配置hbase.rootdir属性,否则您的数据仍存储在/ tmp /中。在本演练中,我们将您的数据存储在HDFS中,假设您有HDFS可用。您可以跳过HDFS配置以继续将数据存储在本地文件系统中。

Hadoop配置

此过程假定您已在本地系统和/或远程系统上配置了Hadoop和HDFS,并且它们正在运行且可用。 它还假设您正在使用Hadoop 2.在Hadoop文档中设置单节点群集的指南是一个很好的起点。

  1. 如果正在运行,请停止HBase。

如果您刚刚完成快速启动并且HBase仍在运行,请将其停止。 此过程将创建一个全新的目录,HBase将存储其数据,因此您之前创建的任何数据库都将丢失。
2. 配置HBase。

编辑hbase-site.xml配置。 首先,添加以下属性,该属性指示HBase以分布式模式运行,每个守护程序有一个JVM实例。

<property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
</property>


接下来,使用hdfs: URI语法将hbase.rootdir从本地文件系统更改为HDFS实例的地址。 在此示例中,HDFS在端口8020上的localhost上运行。请确保删除hbase.unsafe.stream.capability.enforce的条目或将其设置为true。


<property>
      <name>hbase.rootdir</name>
      <value>hdfs://localhost:8020/hbase</value>
</property>

您无需在HDFS中创建目录。 HBase会为你做这件事。 如果您创建目录,HBase将尝试进行迁移,这不是您想要的。

  1. 启动HBase。

使用bin / start-hbase.sh命令启动HBase。 如果您的系统配置正确,则jps命令应该显示正在运行的HMaster和HRegionServer进程。

  1. 检查HDFS中的HBase目录。

如果一切正常,HBase在HDFS中创建了它的目录。 在上面的配置中,它存储在HDFS上的/ hbase /中。 您可以在Hadoop的bin /目录中使用hadoop fs命令列出此目录。


[root@master workspace]# hdfs dfs -ls /hbase
Found 12 items
drwxr-xr-x   - hbase hbase          0 2019-06-02 23:29 /hbase/.hbck
drwxr-xr-x   - hbase hbase          0 2019-06-02 23:29 /hbase/.tmp
drwxr-xr-x   - hbase hbase          0 2019-06-03 09:31 /hbase/MasterProcWALs
drwxr-xr-x   - hbase hbase          0 2019-06-02 23:29 /hbase/WALs
drwxr-xr-x   - hbase hbase          0 2019-06-03 09:26 /hbase/archive
drwxr-xr-x   - hbase hbase          0 2019-06-02 23:29 /hbase/corrupt
drwxr-xr-x   - hbase hbase          0 2019-06-02 23:29 /hbase/data
-rw-r--r--   2 hbase hbase         42 2019-06-02 23:29 /hbase/hbase.id
-rw-r--r--   2 hbase hbase          7 2019-06-02 23:29 /hbase/hbase.version
drwxr-xr-x   - hbase hbase          0 2019-06-02 23:29 /hbase/mobdir
drwxr-xr-x   - hbase hbase          0 2019-06-03 09:31 /hbase/oldWALs
drwx--x--x   - hbase hbase          0 2019-06-02 23:29 /hbase/staging
  1. 创建一个表并用数据填充它。

您可以使用HBase Shell创建表,使用数据填充表,扫描并从中获取值,使用与shell练习相同的程序。

  1. 启动和停止备份HBase Master(HMaster)服务器。

在同一硬件上运行多个HMaster实例在生产环境中没有意义,就像运行伪分布式集群对生产没有意义一样。 此步骤仅用于测试和学习目的。

HMaster服务器控制HBase集群。 您可以启动最多9个备用HMaster服务器,这使得10个HMaster服务器成为主服务器。 要启动备份HMaster,请使用local-master-backup.sh。 对于要启动的每个备份主站,添加一个表示该主站的端口偏移量的参数。 每个HMaster使用两个端口(默认为16000和16010)。 端口偏移量将添加到这些端口,因此使用偏移量2,备份HMaster将使用端口16002和16012.以下命令使用端口16002 / 16012,16003 / 16013和16005/16015启动3个备份服务器。

$ ./bin/local-master-backup.sh start 2 3 5

要在不杀死整个群集的情况下终止备份主服务器,您需要找到其进程ID(PID)。 PID存储在名为/tmp/hbase-USER-X-master.pid的文件中。 该文件的唯一内容是PID。 您可以使用kill -9命令来终止该PID。 以下命令将使用端口偏移量1终止主服务器,但保持集群运行:

$ cat /tmp/hbase-testuser-1-master.pid |xargs kill -9

  1. 启动和停止其他RegionServers

HRegionServer按照HMaster的指示管理其StoreFiles中的数据。通常,一个HRegionServer在群集中的每个节点上运行。在同一系统上运行多个HRegionServers对于以伪分布式模式进行测试非常有用。 local-regionservers.sh命令允许您运行多个RegionServers。它的工作方式与local-master-backup.sh命令类似,因为您提供的每个参数都代表实例的端口偏移量。每个RegionServer需要两个端口,默认端口为16020和16030.自HBase版本1.1.0起,HMaster不使用区域服务器端口,这将留下10个端口(16020到16029和16030到16039)用于RegionServers。要支持其他RegionServers,请在运行脚本local- regionservers.sh之前将环境变量HBASE_RS_BASE_PORT和HBASE_RS_INFO_BASE_PORT设置为适当的值。例如对于基本端口,值为16200和16300,在服务器上可以支持99个额外的RegionServers。以下命令启动另外四个RegionServers,在16022/16032(基本端口16020/16030加2)的顺序端口上运行。

$ .bin/local-regionservers.sh start 2 3 4 5

要手动停止RegionServer,请使用local-regionservers.sh命令以及stop参数和要停止的服务器的偏移量。


$ .bin/local-regionservers.sh stop 3
  1. 停止HBase。

您可以使用bin / stop-hbase.sh命令以与快速入门过程相同的方式停止HBase。

高级 - 完全分布式

实际上,您需要完全分布式配置才能完全测试HBase并在实际场景中使用它。 在分布式配置中,群集包含多个节点,每个节点运行一个或多个HBase守护程序。 这些包括主要和备用主实例,多个ZooKeeper节点和多个RegionServer节点。
此高级快速入门为您的群集添加了两个节点。 架构如下:

Node NameMasterZooKeeperRegionServer
node-a.example.comyesyesno
node-b.example.combackupyesyes
node-c.example.comnoyesyes

本快速入门假定每个节点都是虚拟机,并且它们都在同一网络上。 它建立在之前的快速入门伪分布式本地安装的基础上,假设您在该过程中配置的系统现在是node-a。 在继续之前停止节点-a上的HBase。

确保所有节点都具有完全的通信访问权限,并且没有防火墙规则可以阻止它们相互通信。 如果您看到任何错误,例如无主机路由,请检查您的防火墙。

过程:配置无密码SSH访问

node-a需要能够登录到node-b和node-c(以及自身)才能启动守护进程。 完成此操作的最简单方法是在所有主机上使用相同的用户名,并从node-a配置无密码SSH登录到其他每个主机。

  1. 在node-a上,生成密钥对。

以使用HBase的用户身份登录时,使用以下命令生成SSH密钥对命令:

$ ssh-keygen -t rsa

如果命令成功,则将密钥对的位置打印到标准输出。 公钥的默认名称是id_rsa.pub。

  1. 创建将在其他节点上保存共享密钥的目录。

在node-b和node-c上,以HBase用户身份登录,并在用户主目录中创建一个.ssh /目录(如果该目录尚不存在)。 如果它已存在,请注意它可能已包含其他键。

  1. 将公钥复制到其他节点。

通过使用scp或其他一些安全方法,将公钥从node-a安全地复制到每个节点。 在每个其他节点上,创建一个名为.ssh / authorized_keys的新文件(如果该文件尚不存在),并将id_rsa.pub文件的内容追加到其末尾。 请注意,您还需要为node-a本身执行此操作。


$ cat id_rsa.pub >> ~/.ssh/authorized_keys
  1. 测试无密码登录。

如果您正确执行了该过程,则不应提示您输入密码您使用相同的用户名从node-a SSH到其他任何节点。

  1. 由于node-b将运行备份Master,重复上面的过程,在node-a的任何地方替换node-b。请确保不要覆盖现有的.ssh / authorized_keys文件,而是使用>>运算符而不是>运算符将新密钥连接到现有文件。

过程:准备节点-a

node-a将运行主master和ZooKeeper进程,但不运行RegionServers。停止RegionServer从node-a开始。

  1. 编辑conf / regionservers并删除包含localhost的行。添加行node-b和node-c的主机名或IP地址。

即使您确实想要在node-a上运行RegionServer,也应该通过其他服务器用来与之通信的主机名来引用它。在这种情况下,那将是node-a.example.com。这使您可以将配置分发到群集的每个节点,任何主机名都会发生冲突。保存文件。

  1. 配置HBase使用node-b作为备份主服务器。

在conf / called backup-master中创建一个新文件,并使用主机名为其添加一个新行节点b。在此演示中,主机名为node-b.example.com

  1. 配置ZooKeeper

实际上,您应该仔细考虑ZooKeeper配置。 您可以在zookeeper部分找到有关配置ZooKeeper的更多信息。 此配置将指示HBase启动和管理群集的每个节点上的ZooKeeper实例。

在node-a上,编辑conf / hbase-site.xml并添加以下属性。

      <property>
       <name>hbase.zookeeper.quorum</name>
       <value>node-a.example.com,node-b.example.com,node-c.example.com</value>
     </property>
     <property>
       <name>hbase.zookeeper.property.dataDir</name>
       <value>/usr/local/zookeeper</value>
     </property>

  1. 在配置中您将node-a称为localhost的任何位置,将引用更改为指向其他节点将用于引用node-a的主机名。在这些示例中,主机名是node-a.example.com

过程:准备node-b和node-c

node-b将运行备份主服务器和ZooKeeper实例。

  1. 下载并解压缩HBase。

将HBase下载并解压缩到node-b,就像您对独立和伪分布式快速入门一样。

  1. 将配置文件从node-a复制到node-b.and node-c。

群集的每个节点都需要具有相同的配置信息。复制内容conf /目录到node-b和node-c上的conf /目录。

过程:启动并测试群集

  1. 确保HBase没有在任何节点上运行。

如果您忘记在之前的测试中停止HBase,则会出现错误。使用jps命令检查HBase是否在任何节点上运行。查找进程HMaster,HRegionServer和HQuorumPeer。如果他们存在,杀了他们。

  1. 启动群集。

在node-a上,发出start-hbase.sh命令。 您的输出将类似于以下内容。

     $ bin/start-hbase.sh
    node-c.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-
    hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-c.example.com.out
    node-a.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-
    hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-a.example.com.out
    node-b.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-
    hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-b.example.com.out
    starting master, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-
    hbuser-master-node-a.example.com.out
    node-c.example.com: starting regionserver, logging to /home/hbuser/hbase-0.98.3-
    hadoop2/bin/../logs/hbase-hbuser-regionserver-node-c.example.com.out
    node-b.example.com: starting regionserver, logging to /home/hbuser/hbase-0.98.3-
    hadoop2/bin/../logs/hbase-hbuser-regionserver-node-b.example.com.out
    node-b.example.com: starting master, logging to /home/hbuser/hbase-0.98.3-
    hadoop2/bin/../logs/hbase-hbuser-master-nodeb.example.com.out

  1. 验证进程是否正在运行。
    在群集的每个节点上,运行jps命令并验证每个服务器上是否正在运行正确的进程。 如果它们用于其他目的,您可能会在服务器上看到其他Java进程。

node -a jps输出

$ jps
20355 Jps
20071 HQuorumPeer
20137 HMaster

node-b jps Output

$ jps
15930 HRegionServer
16194 Jps
15838 HQuorumPeer
16010 HMaster

node-c jps Output


$ jps
13901 Jps
13639 HQuorumPeer
13737 HRegionServer

ZooKeeper进程名称

HQuorumPeer进程是一个ZooKeeper实例,由HBase控制和启动。 如果以这种方式使用ZooKeeper,则每个群集节点仅限一个实例,并且仅适用于测试。 如果ZooKeeper在HBase之外运行,则该过程称为QuorumPeer。 有关ZooKeeper配置的更多信息,包括使用带有HBase的外部ZooKeeper实例,请参阅zookeeper部分。

  1. 浏览到Web UI。

Web UI端口更改

在HBase比0.98.x更新的情况下,HBase Web UI使用的HTTP端口从Master的60010和每个RegionServer的60030变为Master的16010和RegionServer的16030。

如果一切设置正确,您应该能够连接到Master http://node-a.example.com:16010/的UI或http://node-b.example.com上的辅助主机: 16010 /使用网络浏览器。 如果您可以通过localhost连接但不能从其他主机连接,请检查防火墙规则。 您可以在端口16030查看其IP地址的每个RegionServers的Web UI,或者单击主UI的Web UI中的链接。

  1. 测试节点或服务消失时会发生什么。

使用已配置的三节点群集,事情将不会非常有弹性。 您仍然可以通过终止关联进程并查看日志来测试主Master或RegionServer的行为。

下一步去哪里

下一章配置提供了有关不同HBase运行模式,运行HBase的系统要求以及设置分布式HBase集群的关键配置区域的更多信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值