执行spark sql 遇到的问题

CDH Sqoop 同步Mysql 数据至hive 报错The specified datastore driver (“org.apache.derby.jdbc.EmbeddedDriver“) CDH Sqoop 同步Mysql 数据至hive 报错,报错内容为 Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the “BONECP” plugin to create a ConnectionPool gave an error : The specified datastore driver (“org.apache.derby.jdbc.EmbeddedDriver”) was not fou 阅读详情

运行环境:

用图形更直观点。

在 spark cluster 和 yarn cluster 两种方式运行spark sql, 操作hive中的数据,另外,hive 是独立的,可以直接运行hive处理数据。

spark sql的程序比较好写,直接看spark的example的例子HiveFromSpark ,很容易理解

首先,在spark cluster上运行:

将hive的   hive-site.xml  配置文件放到 ${SPARK_HOME}/conf 目录下

  1. #!/bin/bash
  2. cd $SPARK_HOME
  3. ./bin/spark-submit \
  4. -- class com.datateam.spark.sql.HotelHive \
  5. --master spark://192.168.44.80:8070 \
  6. --executor-memory 2G \
  7. --total-executor-cores 10 \
  8. /home/q/spark/spark-1.1.1-SNAPSHOT-bin-2.2.0/jobs/spark-jobs-20141023.jar \

执行脚本,遇到下面的错误:

  1. Exception in thread "main" org.apache.hadoop.hive.ql.metadata.HiveException: Unable to fetch table dw_hotel_price_log
  2. at org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java: 958)
  3. at org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java: 924)
  4. ……
  5. Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the "BONECP" plugin to create a ConnectionPool gave an error :
  6. The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH.
  7. Please check your CLASSPATH specification, and the name of the driver.
  8. at org.datanucleus.store.rdbms.ConnectionFactoryImpl.generateDataSources(ConnectionFactoryImpl.java:237)
  9. at org.datanucleus.store.rdbms.ConnectionFactoryImpl.initialiseDataSources(ConnectionFactoryImpl.java:110)
  10. at org.datanucleus.store.rdbms.ConnectionFactoryImpl.<init>(ConnectionFactoryImpl.java:82)
  11. ... 127 more
  12. Caused by: org.datanucleus.store.rdbms.datasource.DatastoreDriverNotFoundException: The specified datastore driver ("com.mysql.jdbc.Driver") was not
  13.  found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.
  14. at org.datanucleus.store.rdbms.datasource.AbstractDataSourceFactory.loadDriver(AbstractDataSourceFactory.java:58)
  15. at org.datanucleus.store.rdbms.datasource.BoneCPDataSourceFactory.makePooledDataSource(BoneCPDataSourceFactory.java:61)
  16. at org.datanucleus.store.rdbms.ConnectionFactoryImpl.generateDataSources(ConnectionFactoryImpl.java:217)

意思是找不到 jdbc 的 connector,解决办法:

在提交任务的脚本里加入下面的配置语句即可:

    --driver-class-path /home/q/spark/spark-1.1.1-SNAPSHOT-bin-2.2.0/lib/mysql-connector-java-5.1.22-bin.jar \

spark cluster 遇到的问题不多,主要在yarn cluster上遇到几个问题。

在spark cluster上调用hive的数据,需要将 hive-site.xml 文件放到spark的conf 目录下,那在yarn上运行该将hive的配置文件放到哪里才能被 spark sql 识别呢?

在提交任务的时候加上:

--files /home/q/spark/spark-1.1.1-SNAPSHOT-bin-2.2.0/conf/hive-site.xml \

这里用到的是 --files  , 而不是 --conf

先看一下 提交任务的脚本:

  1. cd $SPARK_HOME
  2. ./bin/spark-submit -- class com.qunar.datateam.spark.sql.HotelHive \
  3. --master yarn-cluster \
  4. --num-executors 10 \
  5. --driver-memory 4g \
  6. --executor-memory 2g \
  7. --executor-cores 2 \
  8. --files /home/q/spark/spark-1.1.1-SNAPSHOT-bin-2.2.0/conf/hive-site.xml \
  9. /home/q/spark/spark-1.1.1-SNAPSHOT-bin-2.2.0/jobs/spark-jobs-20141023.jar \

ok,我们这里同样需要将mysql connector的jar包添加进去,如何进行?

--jars mysql-connectorpath

但是会出现下面的问题:

  1. Exception in thread "Driver" java.lang.reflect.InvocationTargetException
  2. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  3. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 57)
  4. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43)
  5. at java.lang.reflect.Method.invoke(Method.java: 606)
  6. at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$ 2.run(ApplicationMaster.scala: 162)
  7. ……
  8.  Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to fetch table tablename
  9.  at org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java: 958)
  10. at org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java: 924)
  11. Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
  12.         at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java: 1212)
  13.         at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java: 62)
  14.         at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java: 72)
  15.         at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java: 2372)
  16.         at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java: 2383)
  17.         at org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java: 950)
  18.         ... 68 more
  19. Caused by: java.lang.reflect.InvocationTargetException
  20.         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  21.         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java: 57)
  22.         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java: 45)
  23.         at java.lang.reflect.Constructor.newInstance(Constructor.java: 526)
  24.         at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java: 1210)
  25.         ... 73 more
  26. Caused by: javax.jdo.JDOFatalUserException: Class org.datanucleus.api.jdo.JDOPersistenceManagerFactory was not found.
  27. NestedThrowables:
  28. java.lang.ClassNotFoundException: org.datanucleus.api.jdo.JDOPersistenceManagerFactory
  29. ……
  30. Caused by: java.lang.ClassNotFoundException: org.datanucleus.api.jdo.JDOPersistenceManagerFactory
  31.         at java.net.URLClassLoader$ 1.run(URLClassLoader.java: 366)
  32.         at java.net.URLClassLoader$ 1.run(URLClassLoader.java: 355)
  33.         at java.security.AccessController.doPrivileged(Native Method)
  34.         at java.net.URLClassLoader.findClass(URLClassLoader.java: 354)
  35.         at java.lang.ClassLoader.loadClass(ClassLoader.java: 425)
  36.         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java: 308)
  37.         at java.lang.ClassLoader.loadClass(ClassLoader.java: 358)
  38.         at java.lang.Class.forName0(Native Method)
  39.         at java.lang.Class.forName(Class.java: 270)
  40.         at javax.jdo.JDOHelper$ 18.run(JDOHelper.java: 2018)
  41.         at javax.jdo.JDOHelper$ 18.run(JDOHelper.java: 2016)
  42.         at java.security.AccessController.doPrivileged(Native Method)
  43.         at javax.jdo.JDOHelper.forName(JDOHelper.java: 2015)
  44.         at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java: 1162)
  45.         ... 97 more

查找资料,发现别人的讨论:http://apache-spark-user-list.1001560.n3.nabble.com/Spark-SQL-JDBC-td11369.html


于是将

datanucleus-api-jdo-3.2.1.jar, datanucleus-core-3.2.2.jar, datanucleus-rdbms-3.2.1.jar 

都加到 --jars 里,但是还是出问题:

  1. Exception in thread "Driver" java.lang.reflect.InvocationTargetException
  2. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  3. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 57)
  4. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43)
  5. at java.lang.reflect.Method.invoke(Method.java: 606)
  6. at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$ 2.run(ApplicationMaster.scala: 162)
  7. Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task 6 in stage 2.0 failed 4 times, most recent failure:
  8. Lost task 6.3 in stage 2.0 (TID 34, l-hbase72.data.cn8
  9. ): java.io.FileNotFoundException: ./datanucleus-core- 3.2.2.jar (Permission denied)
  10. java.io.FileOutputStream.open(Native Method)
  11. java.io.FileOutputStream.<init>(FileOutputStream.java: 221)
  12. com.google.common.io.Files$FileByteSink.openStream(Files.java: 223)
  13. com.google.common.io.Files$FileByteSink.openStream(Files.java: 211)
  14. com.google.common.io.ByteSource.copyTo(ByteSource.java: 203)
  15. com.google.common.io.Files.copy(Files.java: 436)

经过不断尝试,将 --jars 后面的配置的jar包都用 --archives 的方式打到运行jar中:

--archives mysql-connector.jar,datanucleus-api-jdo-3.2.1.jar, datanucleus-core-3.2.2.jar, datanucleus-rdbms-3.2.1.jar 

ok

另外还要注意一点:

spark sql 中不认“;”,所以只能在sql中指明database,不能用 use database ; 这样的hive sql 语句指定database

The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH The specified datastore driver (“com.mysql.jdbc.Driver”) was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver已解决 要执行的代码如下: object HiveRead { def mai... 阅读详情

相关推荐

如何解决Spark-sql读取hive分区表执行效率低问题

在开发过程中使用spark去读取hive分区表的过程中(或者使用hive on spark、nodepad开发工具),部分开发人员未注意添加分区属性过滤导致在执行过程中加载了全量数据,引起任务执行效率低、磁盘IO大量损耗等问题。2、自定义规则CheckPartitionTable类,实现Rule,将规则类追加至Optimizer.batches: Seq[Batch]中。1、自定义规则CheckPartitionTable类,实现Rule,通过以下方式创建SparkSession。...

zjjcchina的博客 1396

Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the “BONECP“ plugin to cre

解决思路:一般这种框架,在启动的时候都会去加载相应的jar包和配置文件,比如hadoop、hive、spark、zookeeper等等,他们默认加载的jar包都会有一个稍微固定的文件夹的,你可以去他们的安装路径里面找一下,我相信你能找到的。操作办法:你需要把hive里的这个mysql驱动,拷贝到spark默认加载的jar包路径里去,再重启一下应该就可以解决了。我启动kyuubi(基于spark)

Knight 1196

Spark UI如何高效地定位性能问题(上)

前面我们介绍了基础知识和 Spark SQL 这两个模块的学习,这也就意味着,我们完成了 Spark 入门“三步走”中的前两步,首先恭喜你!在学习的过程中,我们逐渐意识到,Spark Core 与 Spark SQL 作为 Spark 并驾齐驱的执行引擎与优化引擎,承载着所有类型的计算负载,如批处理、流计算、数据分析、机器学习,等等。Spark Core 与 Spark SQL 运行得是否稳定与高效,决定着 Spark 作业或是应用的整体“健康状况”。不过,在日常的开发工作中,我们总会遇到 Spark 应用

2401_84052244的博客 3644

hive问题

hive启动报错 问题描述:hive启动程序报错错误 Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the "HikariCP" plugin to create a ConnectionPool gave an error : Failed to initialize pool: null, message from server: "Host '192.168.1.111' is blocked be

weixin_45430750的博客 2227

Spark SQL报错:The specified datastore driver (“com.mysql.jdbc.Driver“) was not found in the CLASSPATH.

Spark SQL报错:The specified datastore driver (“com.mysql.jdbc.Driver”) was not found in the CLASSPATH. 启动Spark SQL报错: ./spark-sql Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the "BONECP" plugin to create a ConnectionPool gave

zhengzaifeidelushang的博客 1000

阿里云天池大数据长期赛:金融风控-贷款违约预测(含代码)

本次比赛让自己在大数据的处理流程上有了更明确的认知,从数据清洗、特征工程、数据建模,每一个过程都能学到很多经验和知识,值得去历练。

weixin_46685991的博客 1万+

Spark与Hive SQL交互中的优化问题(Spark与Hive执行结果不一致问题)及解决方案

在大数据处理领域,Spark和Hive都是极为重要的工具。Spark凭借其强大的内存计算能力和丰富的编程接口,在数据处理和分析方面表现卓越;而Hive作为数据仓库工具,擅长处理大规模数据的存储和管理,并提供了类似于SQL的查询语言Hive SQL。由于它们的广泛应用,常常需要在同一数据处理流程中协同工作。然而,Spark在对Hive SQL进行优化时,可能会引发一些问题,如类型转换异常和文件格式转换异常等,这些问题在特定场景下会给数据处理工作带来困扰,本文将深入探讨这些问题并提供相应的解决方案。

qq_41631913的博客 1663

短信验证码接收平台完整搭建教程(超详细版,附完整源码)

在网站注册、用户登录、找回密码等功能中,验证码(特别是短信验证码)已成为验证用户身份的常见方式。本教程将详细介绍如何从零搭建一个短信验证码接收平台,用于保存、展示并管理来自短信网关或中间转发程序提交的验证码数据。✅ 教程适合有基本 Python/HTML 基础的开发者🚫 禁止用于任何违法用途,仅供学习参考✅ 支持通过 POST 接口接收短信验证码✅ 支持通过网页实时查看验证码历史记录✅ 验证码信息保存在 SQLite 数据库✅ 支持时间戳排序、查询最新验证码。

weixin_52548902的博客 4554

Spark执行SQL报错GC问题

java.lang.OutOfMemoryError: GC overhead limit exceeded at org.apache.spark.unsafe.types.UTF8String.fromAddress(UTF8String.java:102) at org.apache.spark.sql.catalyst.expressions.UnsafeRow.getUTF8Stri...

lhxsir的博客 2863

adb 通信协议分析以及实现 (三) (Adb 网络通信部分解析)

这篇文章说下adb 和adb 服务进程之间通信的socket 协议。  adb 服务进程启动之后,会监视本地的5037 端口,使用的是TCP 协议,所以adb 发送的命令其实就是往本地的5037 端口发送数据,做过网络编程的都知道,本机可以用127.0.0.1 ip地址。 有了ip 地址和端口号socket 通信就没问题 1)  命令发送方式      

inforecovvery的博客 2870

WPS JS宏智能识别代码段并设置样式(完整可用版)

之前,我们已经经历了多次迭代,解决了许多问题,比如识别代码块、处理多行导入、调整样式等。现在他们需要一份全面的文档来解释整个代码的结构和工作原理。(5)智能行分析(含URL和注解检测优化)function analyzeLineEnhanced(rawText,trimmedText,codeSymbols,codePatterns, singleLinePatterns)该解决方案在保持高性能的同时,提供了良好的可扩展性,能够适应不同组织的代码规范需求,是WPS生态中专业文档处理的创新实践。

搏博的专栏 1823

spark 执行 hive sql数据丢失

摘要:使用spark-sql执行hive查询时,发现结果比hive-sql少了2条数据。原因是表中user_id字段为CHAR类型,在spark中会自动补空格,而hive不会。解决方案是使用TRIM()函数处理user_id字段,如:select date,user_id,pay from dim.isr_pay_failed where trim(user_id)='*******'。其他类型字段如TIMESTAMP也需要注意spark和hive的处理差异。(135字)

qq_40841339的博客 1077

不到200块!手把手教你用ZYNQ7010和AD9363攒一台自己的开源SDR硬件(附BOM清单)

本文详细介绍了如何用不到200元的预算,基于ZYNQ7010 FPGA和AD9363射频芯片打造一台功能完备的开源SDR硬件平台。从核心组件选型、PCB设计到焊接调试,提供全流程实战指南,特别适合预算有限的硬件爱好者和创客群体探索无线通信世界。

weixin_26854829的博客 479

记一次Spark SQL问题排查的经历

起因 分析师A:哇 你们这个数据查询平台查Spark ,同样的SQL结果每次都不同,这能用? 我:???第一反应是你八成是在查一张,别人在更新数据的表吧。。(同个SQL也会去跑两遍 小声bb) 排查过程 过了一会儿,分析师A:看了半天了没人动数据啊,你这个Spark有问题吧? 一脸蒙逼,开始排查问题。 首先把SQL copy执行了下,果然每次都不一样,查了下源表 也没人在变更。 SQL如下: se...

Deegue 1592

实战避坑:基恩士KV8000 PLC与C#上位机链路通讯全流程实现(含ST代码+上位机源码)

本文详细讲解了基恩士KV8000 PLC与C#上位机的TCP链路通讯实现,从PLC端的ST代码编写、通讯配置,到上位机的通讯类封装、界面实现,再到实战避坑和性能优化,提供了完整的可复用方案。该方案已在实际产线项目中验证,支持实时数据采集和控制指令下发,稳定性和可靠性满足工业场景需求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1176

无刷电机FOC硬件电路设计

本文先对MIT无刷电机FOC硬件电路分析做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章软件程序在我另外一个博客【嵌入式–伺服电机】MIT无刷电机FOC驱动程序分析。

qq_35635374的博客 574

sql 不使用join_spark执行map-join优化

在使用map reduce处理数据的时候,join操作有两种选择:一种选择是在map端执行join操作,即所谓的Map-side Join(Broadcast join);另一种选择是在reduce端执行join操作,即所谓的Reduce-side Join(shuffle join)。在map端执行join操作,适合在有一个表比较小的情况下,能把整个表放到内存,发送到各个节点进行join操作。...

weixin_39918084的博客 550

31、工程中不确定性量化与优化的全面解析

本文全面解析了工程中不确定性量化与优化的关键方法。针对数据充足与不足两种情况,分别介绍了概率理论和非概率方法在不确定性建模中的应用;系统阐述了采样方法、FORM/SORM、泰勒级数近似等不确定性传播技术;深入比较了RBDO与RDO两种主流优化框架的原理、步骤及适用场景,并通过两杆桁架案例展示了具体实现过程。文章旨在为工程师提供一套完整的从不确定性分析到优化设计的方法论,提升工程系统的可靠性与稳健性。

php55的博客 121

spark2.3.3升级到2.4.6的问题

升级过程中遇到一些问题,逐个解决。 其中有个问题:spark thrift server启动后,执行sql报错 > select * from xxx.xxx limit 10; Error: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 5.0 failed 10 times, most recent failure: Lost task 0.9 in stage 5.0 (

L13763338360的博客 1326

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

24、Spark读取Hive时的SqlParser发生变更导致sql执行不通过

查看hive表的ddl语句中关于spark.sql的配置,TBLPROPERTIES里有个参数 ‘spark.sql.sources.provider’=‘parquet’, 这个参数会将spark的datasource转为parquet,而不是我们期望的hive,那么直接删除即可。可以看到报错内容里,spark sql 的解析啥的都走的 SparkSqlParser,并非我们期望的 hive解析器。hivesql 语法中这个场景并不会报这个错误。

weixin_42960808的博客 580

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SPARK -SQL 小文件问题

SPARK 小文件问题spark -sql 小文件生成原因设置参数减少小文件的生成 spark -sql 小文件生成原因 spark -sql 提交任务默认shuffle 数量是 200 如果数据量过小会造成每一个shuffle 输出的文件数据量过小时间长了就会有大量小文件产生 设置参数减少小文件的生成 spark-sql adaptive框架解决小文件问题 打开自适应框架的开关 set spark.sql.adaptive.enabled=true; 设置partition的上下限 set spar

qq_43039301的博客 1704

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spark SQL之工作原理剖析以及性能优化

目录 一:Spark Sql 的执行流程 二:Spark SQL之优化 三:待解决问题 一:Spark Sql 的执行流程 1、SqlParse(SQL语句) MySQL,Oracle,Hive等,都首先生成一条SQL语句的执行计划 2、Analyser(分析仪) 解析后的逻辑计划: 例如: from table students = > filter => sele...

威少(微笑) 529

Spark SQL 添加第三方依赖包

最近在使用spark sql 执行hive语句时碰到异常信息如下: Class org.openx.data.jsonserde.JsonSerDe not found Exception 开始以为时hive环境有问题,把sql语句拿到hive环境单独跑没有问题,排除掉这项。若有问题,参考解决方案。 https://www.it610.com/article/1282643683400761344.htm 使用spark-submit --jar 提交掉时候已经引入了json-serde-.

freeRoad 2291

spark脚本因为特殊符号报错

这段SQL在hue里面测试成功,但是在spark脚本里面执行报错, 最终定位的问题是出现了一个中文的全角空格,把全角空格全部替换成空格就没有问题了. ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201229104729405.png ...

macfei的博客 307

Spark SQL关于minus的问题记录

今天写了一个曲折的SQL,大概是这样 -- 有可能是我给人家写复杂了 with org_year_view as( select distinct org, year from A ) select * from A minus -- find data that cannot be used because of missing data in formula select f....

小朋友2滴偷偷的在写博客 1514
上一篇: 将DataFrame数据如何写入到Hive表中
下一篇: Spark SQL读取hive数据时报找不到mysql驱动
TheManOfCoding
博客等级 码龄9年 24粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值