Linux大数据组件配置(自看)

一、ssh免密

指令用处
ssh-keygen -t rsa -P “”创建私钥
cat ~/.ssh/id_rsa_pub > ~/.ssh/authorized_keys创建公钥
cat ~/.ssh/id_rsa_pub >> ~/.ssh/authorized_keys在公钥中追加私钥
chmod 700 ~/.ssh/authorized_keys修改权限

二、java

1. 解压

tar -zxvf /opt/software/jdk-8u11-linux-x64.tar.gz -C /usr/local/src

2. 在环境变量/etc/profile中添加

export JAVA_HOME=/usr/local/src/java
export PATH=$PATH:$JAVA_HOME/bin

三、zookeeper

1. 解压

tar -zxvf /opt/software/zookeeper-3.4.8.tar.gz -C /usr/local/src/ 

2. 在环境变量/etc/profile中添加

export ZK_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin

3. 将 zoo_sample.cfg复制为zoo.cfg,添加并更改如下配置:

#修改
dataDir=/usr/local/src/zookeeper/data # 程序缓存存储路径
#增加
dataLogDir=/usr/local/src/zookeeper/logs # 程序日志存储路径
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

4. 切换到zookeeper的data文件夹下创建myid

echo "1" > myid # 不同的ip要配置不同的myid,master为1

四、高可用hadoop

文件名称用途
hadoop-env.sh由于Hadoop是java进程,所以需要添加jdk
core-site.xml指定namenode的位置,配置全局参数
hdfs-site.xml配置namenode和datanode存放文件的具体路径,配置HDFS参数
mapred-site.xml决定mapreduce作业是提交到 YARN集群还是使用本地作业执行器本地执行
yarn-site.xml集群资源管理系统参数
slaves写入的ip对应的机器执行DataNode 和 NodeManager

1. 解压

tar -zxvf /opt/software/hadoop-2.7.1.tar.gz -C /usr/local/src/

2. 在环境变量/etc/profile中添加

export HADOOP_HOME=/usr/local/src/hadoop
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_OPTS="-
Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

3. 配置文件

- hadoop-env.sh

export JAVA_HOME=/usr/local/src/java

- core-site.xml —— 配置全局参数

<configuration>

 <!-- 指定 hdfs 的 nameservice 为 mycluster -->
 <property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
 </property>
 
 <!-- 指定缓存文件存储的路径 -->
 <property>
  <name>hadoop.tmp.dir</name>
  <value>file:/usr/local/src/hadoop/tmp</value>
 </property>

 <!-- 指定 zookeeper 地址 -->
 <property>
  <name>ha.zookeeper.quorum</name>
  <value>master:2181,slave1:2181,slave2:2181</value>
 </property>

 <!-- hadoop 链接 zookeeper 的超时时长设置 -->
 <property>
  <name>ha.zookeeper.session-timeout.ms</name>
  <value>30000</value>
  <description>ms</description>
 </property>
 
 <!-- hdfs垃圾回收周期 -->
 <property>
  <name>fs.trash.interval</name>
  <value>1440</value>
 </property>
 
 <!-- *来表示允许所有的主机/用户组/用户 -->
 <!-- 配置该hadoop允许通过代理访问的主机节点 -->
 <property>
  <name>hadoop.proxyuser.hadoop.hosts</name>
  <value>*</value> 
 </property>
 
 <!-- 配置该hadoop允许代理的用户所属组 -->
 <property>
  <name>hadoop.proxyuser.hadoop.groups</name>
  <value>*</value>
 </property>
</configuration>

- hdfs-site.xml —— HDFS参数

<configuration>

 <!-- journalnode 集群之间通信的超时时间 -->
 <property>
  <name>dfs.qjournal.start-segment.timeout.ms</name>
  <value>60000</value>
 </property>

 <!--指定 hdfs 的 nameservice 为 mycluster,需要和 core-site.xml 中的保持一致
 dfs.ha.namenodes.[nameservice id]为在 nameservice 中的每一个 NameNode 设置唯一标示
 符。配置一个逗号分隔的NameNode ID列表。这将是被DataNode识别为所有的NameNode。
 如果使用"mycluster"作为 nameservice ID,并且使用"master"和"slave1"作为 NameNodes 标
 示符 -->
 <property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
 </property>

 <!-- mycluster 下面有两个 NameNode,分别是 master,slave1 -->
 <property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>master,slave1</value>
 </property>

 <!-- master 的 RPC 通信地址 -->
 <property>
  <name>dfs.namenode.rpc-address.mycluster.master</name>
  <value>master:8020</value>
 </property>

 <!-- slave1 的 RPC 通信地址 -->
 <property>
  <name>dfs.namenode.rpc-address.mycluster.slave1</name>
  <value>slave1:8020</value>
 </property>
 
 <!-- master 的 http 通信地址 -->
 <property>
  <name>dfs.namenode.http-address.mycluster.master</name>
  <value>master:50070</value>
 </property>
 
 <!-- slave1 的 http 通信地址 -->
 <property>
  <name>dfs.namenode.http-address.mycluster.slave1</name>
  <value>slave1:50070</value>
 </property>

 <!-- 指定 NameNode 的 edits 元数据的共享存储位置。也就是 JournalNode 列表
 该 url 的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId
 journalId 推荐使用 nameservice,默认端口号是:8485 -->
 <property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
 </property>

 <!-- 配置失败自动切换实现方式 -->
 <property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
 </property>

 <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 -->
 <property>
  <name>dfs.ha.fencing.methods</name>
  <value>
  sshfence
  shell(/bin/true)
  </value>
 </property>
 
 <property>
  <name>dfs.permissions.enabled</name>
  <value>false</value>
 </property>
 
 <!-- 配置hdfs文件追加 -->
 <property>
  <name>dfs.support.append</name>
  <value>true</value>
 </property>

 <!-- 使用 sshfence 隔离机制时需要 ssh 免登陆 -->
 <property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/root/.ssh/id_rsa</value>
 </property>

 <!-- 指定副本数 -->
 <property>
  <name>dfs.replication</name>
  <value>2</value>
 </property>
 
 <!-- 配置namenode数据源存放路径 可以配置多个路径 -->
 <property>
  <name>dfs.namenode.name.dir</name>
  <value>/usr/local/src/hadoop/tmp/hdfs/nn</value>
 </property>
 
 <!-- 指定 DataNode 在本地磁盘存放数据的位置 -->
 <property>
  <name>dfs.datanode.data.dir</name>
  <value>/usr/local/src/hadoop/tmp/hdfs/dn</value>
 </property>

 <!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->
 <property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/usr/local/src/hadoop/tmp/hdfs/jn</value>
 </property>

 <!-- 开启 NameNode 失败自动切换 -->
 <property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
 </property>

 <!-- 启用 webhdfs -->
 <property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
 </property>

 <!-- 配置 sshfence 隔离机制超时时间 -->
 <!-- SSH连接超时,毫秒,仅适用于内建的sshfence fencer。 -->
 <property>
  <name>dfs.ha.fencing.ssh.connect-timeout</name>
  <value>30000</value>
 </property>
 
 <!-- 手动运行的FC功能(从CLI)等待健康检查、服务状态的超时时间 -->
 <property>
  <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
  <value>60000</value>
 </property>
 
</configuration>

- mapred-site.xml —— MapReduce参数

<configuration>

 <!-- 指定 mr 框架为 yarn 方式 -->
 <property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
 </property>

 <!-- 指定 mapreduce jobhistory 地址 -->
 <property>
  <name>mapreduce.jobhistory.address</name>
  <value>master:10020</value>
 </property>

 <!-- 任务历史服务器的 web 地址 -->
 <property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>master:19888</value>
 </property>
 
</configuration>

- yarn-site.xml —— 集群资源管理系统参数

<configuration>

 <!-- Site specific YARN configuration properties -->
 <!-- 开启 RM 高可用 -->
 <property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
 </property>

 <!-- 指定 RM 的 cluster id -->
 <property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>yrc</value>
 </property>

 <!-- 指定 RM 的名字 -->
 <property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
 </property>

 <!-- 分别指定 RM 的地址 -->
 <property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>master</value>
 </property>
 <property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>slave1</value>
 </property>

 <!-- 指定 zk 集群地址 -->
 <property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>master:2181,slave1:2181,slave2:2181</value>
 </property>
 
 <!-- 在Yarn上开启MR的必须项 -->
 <property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
 </property>
 
 <!-- 是否允许日志汇聚功能 -->
 <property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
 </property>
 
 <!-- 保存汇聚日志时间,秒,超过会删除,-1表示不删除。 注意,设置的过小,
 将导致NN垃圾碎片。建议3-7天 = 7 * 86400 = 604800 -->
 <property>
  <name>yarn.log-aggregation.retain-seconds</name>
  <value>86400</value>
 </property>


 <!-- 启用自动恢复 -->
 <property>
  <name>yarn.resourcemanager.recovery.enabled</name>
  <value>true</value>
 </property>

 <!-- 制定 resourcemanager 的状态信息存储在 zookeeper 集群上 -->
 <property>
  <name>yarn.resourcemanager.store.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
 </property>
 
 <!-- 是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
 <property>
  <name>yarn.nodemanager.pmem-check-enabled</name>
  <value>false</value>
 </property>
 
 <!-- 是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
 <property>
  <name>yarn.nodemanager.vmem-check-enabled</name>
  <value>false</value>
  <description>Whether virtual memory limits will be enforced for containers</description>
 </property>
 
 <!-- 任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2.1 -->
 <property>
  <name>yarn.nodemanager.vmem-pmem-ratio</name>
  <value>4</value>
  <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
 </property>
 
</configuration>

- slaves

master
slave1
slave2

五、hbase

文件名称用途
hbase-env.sh配置环境变量
hbase-site.xmlhbase主要的配置文件
regionservers一个文本文件,包含所有需要运行regionserver服务的注解

1. 解压

tar -zxvf /opt/software/hbase-1.2.1-bin.tar.gz -C /usr/local/src/

2. 在环境变量/etc/profile中添加

export HBASE_HOME=/usr/local/src/hbase
export PATH=$PATH:$HBASE_HOME/bin

3. 配置文件

- hbase-env.sh

export JAVA_HOME=/usr/local/src/java
export HADOOP_HOME=/usr/local/src/hadoop
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HBASE_MANAGES_ZK=false
export HBASE_LOG_DIR=${HBASE_HOME}/logs
export HBASE_PID_DIR=${HBASE_HOME}/pid

- hbase-site.xml

<configuration>
 
 <!-- 配置region server的共享目录 -->
 <property>
  <name>hbase.rootdir</name>
  <value>hdfs://master:8020/hbase</value>
 </property>
 
 <!--默认HMaster HTTP访问端口-->
 <property>
  <name>hbase.master.info.port</name>
  <value>16010</value>
 </property>
 
 <!-- HBase-managed ZK mode,使用独立的ZooKeeper集群则不会启用该端口 -->
 <property>
  <name>hbase.zookeeper.property.clientPort</name>
  <value>2181</value>
 </property>
 
 <!-- 配置本地文件系统的临时文件夹 -->
 <property>
  <name>hbase.tmp.dir</name>
  <value>/usr/local/src/hbase/tmp</value>
 </property>
 
 <!-- ZooKeeper 会话超时 -->
 <property>
  <name>zookeeper.session.timeout</name>
  <value>120000</value>
 </property>
 
 <!-- HBase 的运行模式。为 false 表示单机模式,为 true 表示分布式模式 -->
 <property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
 </property>
 
 <!-- Zookeeper 集群的地址列表 -->
 <property>
  <name>hbase.zookeeper.quorum</name>
  <value>master,slave1,slave2</value>
 </property>
 
 <!-- ZooKeeper的zoo.conf中的配置 -->
 <property>
  <name>hbase.zookeeper.property.dataDir</name>
  <value>/usr/local/src/hbase/tmp/zookeeper-hbase</value>
 </property>
 
</configuration>

- regionservers

slave1
slave2

4. hadoop中的配置文件复制到hbase的conf中

cp /usr/local/src/hadoop/etc/hadoop/core-site.xml /usr/local/src/hbase/conf/
cp /usr/local/src/hadoop/etc/hadoop/hdfs-site.xml /usr/local/src/hbase/conf/

六、mysql

1. 配置本地yum源

mkdir /mnt/cdrom
mount -t iso9660 /dev/cdrom /mnt/cdrom
mv /etc/yum.repos.d /etc/yum.repos.d.bak
mkdir /etc/yum.repos.d
vi /etc/yum.repos.d/CentOS-local.repo
[base-local]
name=centos
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
yum clean all
yum makecache

2. 卸载mariadb并安装mysql

rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rpm
yum install net-tools
yum install perl
rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm

3. 在/etc/my.cnf中添加

default-storage-engine=innodb
innodb_file_per_table
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server=utf8

4. 启动mysql并修改密码

systemctl start mysqld —— 启动mysql
systemctl status mysqld —— 查看mysql状态
cat /var/log/mysqld.log | grep password —— 得到 MySQL 初始密码
mysql_secure_installation —— 重新设定密码和配置
mysql -uroot -pPassword123$

七、hive

1. 解压

文件名称用途
hive-env.sh配置环境变量
hive-site.xmlhive主要的配置文件
tar -zxvf apache-hive-2.0.0-bin.tar.gz -C /usr/local/src/

2. 在环境变量/etc/profile中添加

export HIVE_HOME=/usr/local/src/hive
export PATH=$HIVE_HOME/bin:$PATH
export HIVE_CONF_DIR=$HIVE_HOME/conf

3. 配置文件

- hive-env.sh

export JAVA_HOME=/usr/local/src/java
export HADOOP_HOME=/usr/local/src/hadoop
export HIVE_CONF_DIR=/usr/local/src/hive/conf
export HIVE_AUX_JARS_PATH=/usr/local/src/hive/lib

- hive-site.xml

<configuration>

 <!-- JDBC连接字符串 -->
 <property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://master:3306/hive_db?createDatabaseIfNotExist=true</value>
 </property>

 <!--mysql 用户名-->
 <property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
 </property>

 <!--mysql 中 hive 用户密码-->
 <property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>Password123$</value>
 </property>

 <!--mysql 驱动-->
 <property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
 </property>
 
 <!-- 远程资源下载的临时目录 -->
 <property>
  <name>hive.downloaded.resources.dir</name>
  <value>/usr/local/src/hive/tmp</value>
 </property>
 
 <!-- 当hive运行在本地模式时配置 -->
 <property>
  <name>hive.exec.local.scratchdir</name>
  <value>/usr/local/src/hive/tmp/${hive.session.id}_resources</value>
 </property>
 
 <!-- 日志文件存储 -->
 <property>
  <name>hive.querylog.location</name>
  <value>/usr/local/src/hive/tmp</value>
 </property>
 
 <!-- 如果启用了日志记录功能,则存储操作日志的顶级目录。 -->
 <property>
  <name>hive.server2.logging.operation.log.location</name>
  <value>/usr/local/src/hive/tmp/operation_logs</value>
 </property>
 
 <!-- WEB UI界面访问ip -->
 <property>
  <name>hive.server2.webui.host</name>
  <value>master</value>
 </property>
 
 <!-- 访问接口 -->
 <property>
  <name>hive.server2.webui.port</name>
  <value>10002</value>
 </property>
 
</configuration>

4. 将mysql驱动复制到hive中

cp /opt/software/mysql-connector-java-5.1.46.jar /usr/local/src/hive/lib/

5. 初始化mysql

schematool -initSchema -dbType mysql

八、sqoop

1. 解压

文件名称用途
sqoop-env.sh配置环境变量
tar -zxvf /opt/software/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /usr/local/src

2. 在环境变量/etc/profile中添加

export SQOOP_HOME=/usr/local/src/sqoop
export PATH=$PATH:$SQOOP_HOME/bin
export CLASSPATH=$CLASSPATH:$SQOOP_HOME/lib

3. 配置文件

- sqoop-env.sh

export HADOOP_COMMON_HOME=/usr/local/src/hadoop
export HADOOP_MAPRED_HOME=/usr/local/src/hadoop
export HBASE_HOME=/usr/local/src/hbase
export HIVE_HOME=/usr/local/src/hive

4. 将mysql驱动复制到sqoop中

cp /opt/software/mysql-connector-java-5.1.46.jar /usr/local/src/sqoop/lib/

九、flume

1. 解压

文件名称用途
flume-env.sh配置环境变量
hdfs_sink.confFlume配置文件
tar zxvf /opt/software/apache-flume-1.6.0-bin.tar.gz -C /usr/local/src

2. 在环境变量/etc/profile中添加

export FLUME_HOME=/usr/local/src/flume
export PATH=$PATH:$FLUME_HOME/bin

3. 配置文件

- flume-env.sh

export JAVA_HOME=/usr/local/src/jdk1.8.0_11

- /usr/local/src/flume/conf/hdfs_sink.conf

#指定 sources 的别名
a1.sources = r1
#指定 sinks 的别名
a1.sinks = k1
#指定 channels 的别名
a1.channels = c1
# Describe/configure the source
#指定 sources 的类型
a1.sources.r1.type = syslogtcp
#指定 sources 的端口
a1.sources.r1.port = 5140
#指定 sources 的主机名
a1.sources.r1.host = localhost
# Describe the sink
#指定 sinks 的类型
a1.sinks.k1.type = hdfs
#指定 sinks 的 hdfs 的路径
a1.sinks.k1.hdfs.path = hdfs://master:8020/user/flume/syslogtcp
#指定 sinks 的 hdfs 的文件名前缀
a1.sinks.k1.hdfs.filePrefix = Syslog
#指定时间戳需要四舍五入
a1.sinks.k1.hdfs.round = true
#四舍五入到小于当前时间的最高倍数
a1.sinks.k1.hdfs.roundValue = 10
# 使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp=true
#四舍五入值的单位,秒、分钟或小时
a1.sinks.k1.hdfs.roundUnit = minute
# Use a channel which buffers events in memory
#指定 channels 的类型
a1.channels.c1.type = memory
# Bind the source and sink to the channel
#将 sources 和 channels 连接
a1.sources.r1.channels = c1
#将 sinks 和 channels 连接
a1.sinks.k1.channel = c1

4. 安装组件

yum install telnet
yum install telnet-server
yum install xinetd
在/etc/xinetd.d下新建telnet配置文件
 service telnet
{  
  flags           = REUSE  
  socket_type     = stream  
  wait            = no  
  user            = root  
  server          =/usr/sbin/in.telnetd  
  log_on_failure  += USERID  
  disable         = no   
}

5. 启动Telnet服务

 systemctl start xinetd
 systemctl enable xinetd

十、scala

1. 解压

tar -zxvf /opt/software/scala-2.11.8.tgz -C /usr/local/src

2. 在环境变量/etc/profile中添加

export SCALA_HOME=/usr/local/src/scala
export PATH=$PATH:$SCALA_HOME/bin

十一、spark

1. 解压

文件名称用途
spark-env.sh配置环境变量
slaves集群节点ip
tar -zxvf /opt/software/spark-2.0.0-bin-hadoop2.6.tgz -C /usr/local/src/

2. 在环境变量/etc/profile中添加

export SPARK_HOME=/usr/local/src/spark
export PATH=$PATH:$SPARK_HOME/bin:$PATH

3. 配置文件

- spark-env.sh

export JAVA_HOME=/usr/local/src/java
export HADOOP_HOME=/usr/local/src/hadoop
export SCALA_HOME=/usr/local/src/scala
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077
export SPARK_DIST_CLASSPATH=$(/usr/local/src/hadoop/bin/hadoop classpath)
export HADOOP_CONF_DIR=/usr/local/src/hadoop/etc/hadoop
export SPARK_YARN_USER_ENV="CLASSPATH=/usr/local/src/hadoop/etc/hadoop"
export YARN_CONF_DIR=/usr/local/src/hadoop/etc/hadoop

- slaves

master
slave1
slave2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Destiny4c6

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

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

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

打赏作者

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

抵扣说明:

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

余额充值