Centos7安装大数据平台CDH 6.2-一些细节补充

centos7 + CM6.2.0
root 123456
mysql8.0.xx
mysql-connect-java-1.54.xx

1、图形界面下的terminal实际上是用一个应用程序连接到terminal的;
2、可以使用以下命令:GUI和命令界面切换命令
    ctrl+alt+F2
    alt+F1

3、vim/vi的三种模式(vim 是vi 的升级版本)

正常模式——按Esc进入, 左下角显示文件名或为空 ,输入vim命令前都需要先按Esc!该模式下又分为命令模式操作和末行模式操作。

插入模式——按i进入, 左下角显示–INSERT–,这个是insert单词的第一个字母,这样好记,编辑文件时很常用。

可视模式—— 按v或V进入,左下角显示–VISUAL–阅读模式,暂时我是这么理解的…
	i        # 在当前位置插入
	a        # 在当前位置后插入
	A        # 在当前行尾插入
	o        # 在当前行之后插入一行
	O        # 在当前行之前插入一行
	s        # 删除光标位置的一个字符,然后进入插入模式
	S        # 删除光标所在的行,然后进入插入模式

保存和退出
	:q!       # 不保存文件,强制退出vim,若退出报错,直接用这个命令即可。
	:q       # 不保存文件,退出vim。
	:wq       # 保存文件,退出vim,w(write), q(quit)。
	:wq!       # 保存文件,并强制退出vim。
	:w        # 保存文件,但不退出vim。
	:w filename       # 将文件另存为filename。
	:wq! filename       # 将文件另存为filename,并强制退出vim。
	:r filename       # 打开另外一个已经存在的文件filename。
	:e filename       # 新建名为filename的文件。
	:f filename       # 把当前文件改名为filename文件。
	:nw filename       # 将第n行内容保存到文件filename中,n代表数字。
	:n1,n2w filename       # 将第n1行开始到n2行结束的内容保存到文件filename中,n1,n2代表数字。
	:1,.w filename       # 将第一行开始到光标当前位置的所有内容保存到文件filename中。
	:.,$w filename       # 将从光标开始位置到文件末尾的所有内容保存到文件filename中。
	:/str/w filename       # 将包含有str的行写到文件filename中,str代表字符。
	:/str1/,/str2/w filename       # 将包含有str1开始到str2结束的内容写入文件filename中,str1和str2代表字符。
	:e!       # 放弃所有修改,从上次保存文件开始再编辑命令历史
	ZZ:       # 保存退出
	ZQ       # 不保存退出
4.centos 7 修改主机名 要修改两个文件hostname hosts
	 centos7修改hostname和hosts
		1、修改/etc/hostname

	vim /etc/hostname

	打开之后的内容是:

	localhost.localdomain

	把它修改成想要的名字就可以,比如:s100

	保存退出

	 

	2、修改/etc/hosts文件

	vim /etc/hosts

	打开之后的内容是:

	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
	::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

	然后在最后面加一行:

	192.168.146.100   s100

	保存退出,然后重启机器或者执行命令systemctl restart systemd-hostnamed,这时候就可以通过hostname来访问这台机器的服务了
	
5.centos7 防火墙操作
	状态查看 
		systemctl status firewalld
	关闭防火墙
		systemctl stop firewalld
		systemctl disable firewalld
		systemctl mask firewalld

6.安全增强型Linux(Security-Enhanced Linux)简称SELinux,它是一个 Linux 内核模块,也是Linux的一个安全子系统。为了避免安装过程出现各种错误,建议关闭,有如下两种关闭方法:

	1)临时关闭(不建议使用)

	[root@hadoop101 ~]# setenforce 0

	但是这种方式只对当次启动有效,重启机器后会失效。

	2)永久关闭(建议使用)

	修改配置文件/etc/selinux/config

	[root@hadoop101 ~]# vim /etc/selinux/config

	将SELINUX=enforcing 改为SELINUX=disabled	
	3)重启主机
	[root@hadoop101 ~]# reboot

7.CentOS7使用集群同步脚本对配置文件同步分发
	1.介绍

使用集群同步脚本对配置文件同步分发

2.操作

1)在/root目录下创建bin目录,并在bin目录下创建文件xsync,文件内容如下:

[root@hadoop101 ~]$ mkdir bin
[root@hadoop101 ~]$ cd bin/
[root@hadoop101 bin]$ vi xsync

在该文件中编写如下代码(其中第5步需要按自己集群情况配置分发范围)
复制代码

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环(102 104 根据实际进行更改)  $user@hadoop$host 拼接成了 root@hadoop101 根据实际情况更改
for((host=102; host<104; host++)); do
	echo ------------------- hadoop$host --------------
	rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done

复制代码

2)修改脚本 xsync 具有执行权限

[root@hadoop101 bin]$ chmod 777 xsync

3.使用示例

1)将hadoop101中的JDK和环境变量分发到hadoop102、hadoop103两台主机

[root@hadoop101 opt]# xsync /opt/module/
[root@hadoop101 opt]# xsync /etc/profile

分别在hadoop102、hadoop103上source一下

[root@hadoop102 ~]$ source /etc/profile
[root@hadoop103 ~]# source /etc/profile

2)同步/etc/selinux/config配置文件

[root@hadoop101 ~]# xsync /etc/selinux/config

重启hadoop101、hadoop102、hadoop103主机

[root@hadoop101 ~]# reboot
[root@hadoop102 ~]# reboot
[root@hadoop103 ~]# reboot

8.提示找不到/etc/sysconfig/network-script/时 切换一个terminal再试试 不行就reboot
9.ip 网络配置相关命令
	cd /etc/sysconfig/network-scripts 
	service network restart

10.yum安装rpm包
	离线安装 yum localinstall percona-xtrabackup-24-2.4.10-1.el7.x86_64.rpm  # 安装本地rpm包
	在线安装 yum install
	都需要在干净环境下 及 安装路径 如下

1、比如首先安装一个redis

[root@iZbp1eem925ojwyx17ao9kZ ~]# yum install redis

2、查找redis的安装包

[root@iZbp1eem925ojwyx17ao9kZ ~]# rpm -qa|grep redis
redis-3.2.10-2.el7.x86_64
[root@iZbp1eem925ojwyx17ao9kZ ~]# 

3、查找安装包的安装路径

[root@iZbp1eem925ojwyx17ao9kZ ~]# rpm -ql redis-3.2.10-2.el7.x86_64
/etc/logrotate.d/redis
/etc/redis-sentinel.conf
/etc/redis.conf
/etc/systemd/system/redis-sentinel.service.d
/etc/systemd/system/redis-sentinel.service.d/limit.conf
/etc/systemd/system/redis.service.d
/etc/systemd/system/redis.service.d/limit.conf
/usr/bin/redis-benchmark
/usr/bin/redis-check-aof
/usr/bin/redis-check-rdb
/usr/bin/redis-cli

4.yum源下载rpm,将rpm放置到缓存目录下:
	/var/cache/yum/
	
5.rpm --import https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/RPM-GPG-KEY-cloudera 安装秘钥所在位置
	/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 检索密钥

11.查看磁盘空间大小
	df -hl

显示:
文件系统 容量 已用 可用 已用% 挂载点 Filesystem Size Used Avail Use% Mounted on /dev/hda2 45G 19G 24G 44% / /dev/hda1 494
 
其他磁盘相关命令:
 
df -hl 查看磁盘剩余空间
 
df -h 查看每个根路径的分区大小
 
du -sh [目录名] 返回该目录的大小
 
du -sm [文件夹] 返回该文件夹总M数
 
du -h [目录名] 查看指定文件夹下的所有文件大小(包含子文件夹)
 
查看硬盘的分区 #sudo fdisk -l
 
查看IDE硬盘信息 #sudo hdparm -i /dev/hda
 
查看STAT硬盘信息 #sudo hdparm -I /dev/sda 或 #sudo apt-get install blktool #sudo blktool /dev/sda id
 
查看硬盘剩余空间 #df -h #df -H
 
查看目录占用空间 #du -hs 目录名		

12.centos7关掉烦人的时间屏幕保护
	系统工具->设置->power(电池)
13.关闭密码登录验证
	系统工具->设置->隐私
	
14.查看防火墙开放端口:iptables-save
	我这里已经开了.如果没开,则执行以下命令:

添加端口:firewall-cmd --zone=public --add-port=3306/tcp --permanent

重载防火墙:firewall-cmd --reload
15.创建cm集群所需要的库	
	CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
	CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
	CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
	CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
	CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
	CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
	CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
	CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
	CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

16.mysql8权限 远程访问
		[root@S100 ~]#grep "password" /var/log/mysqld.log
		[root@S100 ~]# mysql -uroot -p

	ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz2WSX#';
	SHOW VARIABLES LIKE 'validate_password%';
	set global validate_password.policy=LOW;
	set global validate_password.length=6;
	ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; //更改秘钥
	exit
	create user 'root'@'%' identified by '123456';
	grant all on *.* to 'root'@'%';
	另外,如果远程连接的时候报plugin caching_sha2_password could not be loaded这个错误,可以尝试修改密码加密插件:

	 mysql> alter user 'root'@'%' identified with mysql_native_password by '123456';
	grant all privileges on *.* to 'root'@'%';
	flush privileges;

	telnet 192.168.146.100 3306

17.mysql编码utf8 更改设置 my.conf
	[client]
	default-character-set=utf8

[mysqld]
character-set-server=utf8

[mysql]
default-character-set=utf8

设置好重启
18.mysql 服务启动 关闭
	service mysqld restart
	systemctl start mysqld.service
	systemctl restart mysqld.service
	systemctl stop mysqld.service
	systemctl status mysqld.service

19./opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm root 123456

20.cm server agent 服务启动 状态 停止
	systemctl start cloudera-scm-server
	systemctl stop cloudera-scm-server
	systemctl restart cloudera-scm-server
	systemctl status cloudera-scm-server
	systemctl status cloudera-scm-agent
	systemctl stop cloudera-scm-agent
	systemctl status cloudera-scm-agent

问题集锦
1.systemctl start mysqld.service 失败
	Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
		解决方法 查看日志 tail -200f  /var/log/mysqld.log

	按提示删除ERROR的提示 rm -rf /var/lib/mysql/   之前mysql配置相关信息全部失效 需重新设置
	然后 [root@s100 mysqld]# systemctl restart mysqld.service
2.执行:vim /etc/profile命令,打开配置文件
1.执行which java命令 查看java的安装路径
	which java 
	执行:
	  1. ls -lrt /usr/bin/java
	  2. ls -lrt /etc/alternatives/java
    从路径中可以看到在jvm目录下,输入cd /usr/lib/jvm,跳转到jvm的目录,执行ls命令,看到如图:
	由此判断,java的安装路径为 java-1.8.0-openjdk-1.8.0.xxx.xx.xx.x86_64
	export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.xxx.xx.xx.x86_64
	export JRE_HOME=$JAVA_HOME/jre
	export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin;
	export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

设置环境变量
3.执行 source /etc/profile命令 使配置生效	
4.Centos7 bash: jps: 未找到命令...
	安装open-jdk后发现jps不能用,此时需要安装另外一个包才能使用
	通过以下命令进行安装:
		sudo yum install java-1.8.0-openjdk-devel.x86_64

5.Cluster 1

HDFS、YARN(含 MapReduce 2)、ZooKeeper、Oozie、Hive、Hue 和 Spark 


6.问-httpd  NFS GATEWAY?
	No portmap or rpcbind service is running on this host. Please start portmap or rpcbind service before attempting to start the NFS Gateway role on this host.

解决方法:
安装yum install portmap
[root@my-cdh-01 hue-httpd]# systemctl start rpcbind 
[root@my-cdh-01 hue-httpd]# systemctl enable rpcbind
systemctl status rpcbind
#安装httpd
[root@localhost media]# yum install httpd

#启动服务
[root@localhost media]# systemctl start httpd
[root@localhost media]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 一 2019-01-21 16:11:38 CST; 5s ago
	 Docs: man:httpd(8)
		   man:apachectl(8)
 Main PID: 6702 (httpd)
#设置自动启动
systemctl enable httpd
netstat -lnpt | grep 8020

7.问-host C:\WINDOWS\system32\drivers\etc

8.问-spark 启动失败 在yarn上运行 内存设置出现了问题 不够
	The health test result for SPARK_ON_YARN_SPARK_YARN_HISTORY_SERVER_UNEXPECTED_EXITS has become good: 
	This role encountered 0 unexpected exit(s) in the previous 5 minute(s).
	spark 启动失败
		spark-shell 出现如下错误
		ERROR repl.Main: Failed to initialize Spark session.
		java.lang.IllegalArgumentException: Required executor memory (1024), overhead (384 MB), 
		and PySpark memory (0 MB) is above the max threshold (1024 MB) of this cluster! 
		Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.
	答	根据提示对Yarn的 yarn.scheduler.maximum-allocation-mb 和 yarn.nodemanager.resource.memory-mb 进行重新设置 大于 1024+384 MB
9.问-spark 启动失败 Caused by: java.io.FileNotFoundException: File does not exist: hdfs://s100:8020/user/spark/applicationHistory
	在namenode的web ui中查看/user 路径提示 Path does not exist on HDFS or WebHDFS is disabled please check your path or enable WebHDFS
	答 创建 hdfs dfs -mkdir -p /user/spark/applicationHistory	 即可
	详细可参考Spark On YARN内存分配 https://www.tuicool.com/articles/YVFVRf3
10.问-hdfs 不良 : Canary 测试无法为 /tmp/.cloudera_health_monitoring_canary_files 创建父目录。
	CM金丝雀Canary报错
	检查:
		1)hdfs是否处于safemode,正常是off
		hdfs dfsadmin -safemode get
		输出:

		Safe mode is OFF

	2)hdfs datanode是否健康,磁盘空间是否空闲,可自行上传文件测试

	hdfs dfsadmin -report

	3)根据错误提示查看目录权限,如果有问题,改为777

	hdfs dfs -chmod 777 /tmp/.cloudera_health_monitoring_canary_files
	4)检查/tmp目录是否存在,不存在,进行创建

	hdfs dfs -ls /tmp
	可能的输出:

		ls: `/tmp’: No such file or directory
		解决办法:

	hdfs dfs -mkdir /tmp
	(1)执行上一个命令后,cm会自动创建出:
	/tmp/.cloudera_health_monitoring_canary_files
(2)查看 CM

11.问-yarn	JobHistory Server  运行失败
   答 在CM诊断里面  主机 s100   角色 JobHistory Server 	搜索
		或者
	  Cluster 1  ->YARN (MR2 Included)  ->JobHistory Server  ->s100  在执行运行状况测试时查看此角色实例的日志 查看到如下内容
		Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): 
		Permission denied: user=mapred, access=WRITE, inode="/":root:supergroup:drwxr-xr-x
	  解决办法 看inode=“/” 决定 hadoop fs -chmod 777 后面跟的目录
		方案一:
			到服务器上修改hadoop的配置文件:conf/hdfs-core.xml, 找到 dfs.permissions 的配置项 , 将value值改为 false:
			<property>
			<name>dfs.permissions</name>
			<value>false</value>
			<description>
			If "true", enable permission checking in HDFS.
			If "false", permission checking is turned off,
			but all other behavior is unchanged.
			Switching from one parameter value to the other does not change the mode,
			owner or group of files or directories.
			</description>
			</property>
			ps:修改完需要重启下hadoop的进程才能生效,生产环境出于安全考虑一般是不建议这么操作的。
		方案二:
			将对应的目录设置最大权限777
			hadoop fs -chmod 777 /
			ps:相对便捷的一个方案
		总之 inode="/" 后面是什么 就把什么权限改为777
		
12.问-spark  Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): 
	Permission denied: user=spark, access=READ, 
	inode="/user/spark/applicationHistory/application_1596611167965_0001.inprogress":root:supergroup:-rwxrwx---			
	或者 
	明明有目录/nameservice1/user/spark/applicationHistory 却找不到
	Error initializing FsHistoryProvider.
	java.io.FileNotFoundException: Log directory specified does not exist: hdfs://nameservice1/user/spark/applicationHistory
		at org.apache.spark.deploy.history.FsHistoryProvider.org$apache$spark$deploy$history$FsHistoryProvider$$startPolling(FsHistoryProvider.scala:268)
		at org.apache.spark.deploy.history.FsHistoryProvider$$anon$2.run(FsHistoryProvider.scala:233)
		at java.lang.Thread.run(Thread.java:748)
	Caused by: java.io.FileNotFoundException: File does not exist: hdfs://nameservice1/user/spark/applicationHistory																		 /nameservice1/user/spark/applicationHistory
		at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1499)
		at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1492)
		at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
		at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1507)
		at org.apache.spark.deploy.history.FsHistoryProvider.org$apache$spark$deploy$history$FsHistoryProvider$$startPolling(FsHistoryProvider.scala:258)
		... 2 more
	SecurityManager: authentication disabled; ui acls disabled; users  with view permissions: 
	Set(spark); groups with view permissions: Set(); users  with modify permissions: Set(spark); groups with modify permissions: Set()
	History server ui acls disabled; users with admin permissions: ; groups with admin permissions
	解决办法 
	配置HDFS的dfs.permission.group 
	1.自己创建文件夹目录 
		hdfs dfs -mkdir -p /user/spark/applicationHistory
		hdfs dfs -mkdir -p /user/spark/driverLogs
	
2.usermod -a -G hadoop spark
	  回过头来还是真心感到spark做得人性化,因为在页面提示中给了两个很重要的信息:一个是spark的日志路径,一个是提示可能是因为权限导致日志无法显示(这个提示没有在贴上面),否则解决这个问题可能要花费更多的时间

	  后来网调发现是因为我使用的是root用户执行的;生成到日志文件到此目录下hdfs://quickstart.cloudera:8020/user/spark/applicationHistory,到此目录下一看用户是root:supergroup;改成spark;再刷http://quickstart.cloudera:18088/即可看到历史任务了;原来是没有权限读入。该权限即可;
	  之前为什么没有这种情况,之前的集群都没有root用户(只要在/user下面添加一个root即可添加hadoop用户),所以运行的时候都报错,于是切换为hdfs用户;hdfs用户生成的文件是hdfs的;
	  但是为什么会有问题?调查得知supergroup一般都是和系统的hadoop组绑定;通过下面的指令查看一下hadoop里面的组员

		1     grep 'hadoop:' /etc/group
		2     lid -g hadoop
		3	  usermod -a -G hadoop spark    
		hdfs dfs -rm -r /nameservice1/user/spark/applicationHistory
	  你会发现做为hadoop组即superuser组只包含hdfs,hive等并没有spark;但是对于applicationHistory文件夹下权限是-rwxrwx---   1 root supergroup,也就是只有root用户,以及supergroup具有全部权限,其他没有;所以即使是hdfs创建的文件仍然无法被spark读取,因为spark既不是hdfs,也没有包含在supergroup组中;
	  除非把spark放入到supergroup组中。调查说是和hadoop组绑定,那我就在hadoop组中添加了spark(需要首先启用spark用户);但是没有毛用。
	  怎么放?Hadoop的HDFS自身是没有用户组控制,用的是操作系统的用户组,这样就意味着:supergroup和本地操作系统用户是有映射关系的,就是在hdfs的配置项中,dfs.permissions.supergroup, dfs.permissions.superusergroup(这两个其实是一个配置内容),默认是supergroup,是的,默认是supergroup,你需要做的是修改为本地一个组,比如hadoop。然后重启HDFS组件,spark服务也一并重启吧。
	  之后你再向hadoop组中添加spark,再刷页面,就发现日志可以看到了。

	  这个问题的关键在于要明白supergroup是和Linux一个组映射;向映射组中添加即可,但是要进行配置映射。
3.配置HDFS的dfs.permission.group =hadoop(或直接添加hadoop组进去)
完成本向导后必须手动执行下列步骤:
将 Hue 服务 Hue 的 HDFS Web 界面角色 配置为 HTTPFS 角色,而非 NameNode。 Documentation
对于每个 Hive 服务 Hive,停止 Hive 服务,将 Hive Metastore 数据库备份到永久性存储中,运行服务命令"更新 Hive Metastore NameNodes",然后重启 Hive 服务。
14.问-spark
	Spark on Yarn只需要部署一份spark,当应用程序启动时,spark会将相关的jar包上传注册给ResoureManager,任务的执行由ResourceManager来调度,并执行spark的代码。
	spark on yarn 是客户端client提交任务,bai(我以spark on yarn 的 yarn-cluster模式为例)由yarn集群生成duspark Driver对象,
	Driver对象在zhiyarn集群中的一个节dao点上运行,yarn集群的 RM,给Driver实例化一个AM线程对象,让AM来负责Driver运行的需求,比如申请资源等。。
	这时候spark集群是不起作用的,spark集群的master和worker只在standalone模式下启动。所以spark on yarn 是运行在yarn集群 
15.centos分配的cup 核数 概念理清
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值