当前位置: 首页 > 知识库问答 >
问题:

Spark只运行一个执行程序,同时尝试从Oracle表将数据读写到HDFS

燕博文
2023-03-14

我正在使用使用 SparkJDBC 连接连接到预言机数据库,并尝试读取包含 4000 万行的预言机表。我在启动火花外壳/提交时为每个执行器使用30个执行器,5个执行器核心和4g内存。在读取数据帧的计数或尝试写入数据帧的数据时,它仅使用一个执行器从预言机读取/写入数据。已尝试对数据帧进行重新分区,但仍仅使用 1 个执行程序,导致性能大幅下降。

以下是使用的语法,非常感谢任何建议。

命令段:-

spark-shell --executor-memory 4G --executor-cores 5 --num-executors 30
val source_df = spark.read.format("jdbc").option("url", JDBC_URL).option("dbtable", src_table).option("user", *****).option("password", *****).option("driver", "oracle.jdbc.driver.OracleDriver").option("numPartitions", 40).option("partitionColumn", "*****").option("lowerBound", 1).option("upperBound", 100000).load()

val df_1_msag=source_table_DF_raw_msag.repartition(40)
df_1_msag.count

[Stage 0:=======================================================> (39 + 1

共有1个答案

柴星津
2023-03-14

oracle db中允许用户的并发连接数也很重要。

https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html

numPartitions<br>可用于表读写并行的最大分区数。这还决定了并发JDBC连接的最大数量。如果要写入的分区数超过此限制,我们在写入之前通过调用coalesce(numPartitions)将其减少到该限制。

 类似资料:
  • 我有一个Spring启动应用程序,当通过intellij运行时工作正常。但是当我从jar运行它时,我得到了下面的异常。 下面是我的pom文件。 我试着用两个 和 然后我通过java运行jar-jar-DParamName="有些Param" 我做错了什么?我是Spring的新手。任何帮助都将不胜感激。

  • 我试图从mysql读取数据,并将其写回s3中的parquet文件,具体分区如下: 我的问题是,它只打开一个到mysql的连接(而不是4个),并且在从mysql获取所有数据之前,它不会写入parquert,因为mysql中的表很大(100M行),进程在OutOfMemory上失败。 有没有办法将Spark配置为打开多个到mysql的连接并将部分数据写入镶木地板?

  • 问题内容: Python中是否有任何东西可以允许您运行多个并发的Python程序,这些程序可能访问同一数据库表,并防止每个程序使用完整的cpu,从而使服务器剩下一些额外的容量? 问题答案: 几个问题: 多个并发的Python程序-请参阅http://wiki.python.org/moin/Concurrency,首先,我将尝试使用内置模块multiprocessing(http://docs.p

  • 运行Gradle时出错: 失败:生成失败,出现异常。 错误:配置根项目“android”时出现问题。 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。 在https://help.gradle.org获得更多帮助 构建在27秒内失败 完成时出现错误:请查看android/文件夹中的Gradle项目设置。

  • 问题内容: 有没有一种Python方式可以只运行一个程序实例? 我想出的唯一合理的解决方案是尝试将其作为服务器在某个端口上运行,然后尝试将第二个程序绑定到同一端口-失败。但这不是一个好主意,也许有比这更轻巧的东西了吗? (考虑到程序有时可能会失败,例如segfault-因此“锁定文件”之类的东西将无法工作) 问题答案: 以下代码可以完成此工作,它是跨平台的,并且可以在Python 2.4-3.2上

  • 问题内容: 我试图在Java中实现一个非常简单的Trie,该Trie支持3种操作。我希望它具有一个insert方法,一个has方法(即trie中的某个单词)和一个toString方法以字符串形式返回trie。我相信我的插入工作正常,但是has和toString证明很困难。到目前为止,这就是我所拥有的。 特里类。 和节点类 因此,基本上,在创建Trie时,将创建一个TrieNode作为具有26个子级