spark只运行一个executor,同时尝试从oracle表向hdfs读写数据

blmhpbnm  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(481)

我正在连接到 oracle database 使用 JDBC connection 使用 Spark 试图读取一个包含4000万行的oracle表。在启动sparkshell/submit时,我使用了30个executors、5个executor核和每个executors的4g内存。在读取计数或试图写入Dataframe的数据时,它只使用一个执行器从oracle读取/写入数据。尝试重新划分Dataframe,但仍然只使用1个执行器,导致性能严重下降。
下面是使用的语法,任何建议都非常感谢。
命令snippet:-

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
flvtvl50

flvtvl501#

用户在oracledb中允许的并发连接数也很重要。
https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html
numpartitions公司
表读写中可用于并行的最大分区数。这也决定了并发jdbc连接的最大数量。如果要写入的分区数超过此限制,则在写入之前通过调用coalesce(numpartitions)将其减少到此限制。

相关问题