首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试从Oracle表读取数据和将数据写入HDFS时,Spark仅运行一个执行器

问尝试从Oracle表读取数据和将数据写入HDFS时,Spark仅运行一个执行器
EN

Stack Overflow用户
提问于 2020-10-30 20:16:23
回答 1查看 379关注 0票数 0

我使用JDBC connection使用Spark连接到oracle database,并尝试读取包含4,000,000行的oracle表。在启动spark-shell/submit时,我为每个执行器使用了30个执行器、5个执行器内核和4g内存。当读取数据帧的计数或尝试写入数据时,它只使用一个执行器从oracle读取/写入数据。尝试对数据帧进行重新分区,但仍然只使用一个执行器,导致性能大幅下降。

下面是使用的语法,任何建议都是非常有用的。

命令片段:-

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2020-10-30 21:06:26

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

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

numPartitions

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64608185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档