gpt4 book ai didi

apache-spark - 为什么 spark 应用程序崩溃并出现异常 java.net.SocketException : Connection reset even after providing sufficient memory & partitioning?

转载 作者:行者123 更新时间:2023-12-04 15:04:26 27 4
gpt4 key购买 nike

我正在尝试将一个表从 Sqlserver 数据库加载到 Bigquery,该表的大小为 27gb、2.18 亿行和 28 列。

源表没有任何包含唯一值的列,以便 Spark 对传入数据进行均匀分区。所以我将 row_number() 应用于我正在阅读的数据,如下所示:

spark = SparkSession.builder.appName('Read_from_Source').getOrCreate()
dataframe = spark.read.format('jdbc').option('url', URL).option('driver', 'con.microsoft.sqlserver.jdbc.SQLServerDriver).
option('user', user).
option('password', password).
option('dbtable', f'select *, row_number() over(ORDER BY (SELECT 1)) as row_num from {tablename}) as temp_load').
option('partitionColumn',row_num).
option('numPartitions', 400).
option('lowerBound', 1).
option('upperBound', countOfNumOfRows).
load()
dataframe.write.format('bigquery').option('table','tablename').mode('overwrite').save()

我为作业提供了以下配置:

> spark.submit.deployMode = Cluster 
> spark.executor.instances=4
> spark.execuor.memory=2g spark.executor.cores=4 spark.driver.memory=2g
> spark.network.timeout=240

当我提交作业时,它开始时运行良好,但过了一段时间后失败并出现异常connection reset,如下所示。

Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:210)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1981)

执行者和舞台如下图所示。执行者在此处输入图像描述

enter image description here

我的工作阶段(只有一个阶段,因为它只是读取和加载):

enter image description here

我认为在读取数据时连接中断/中断,因此出现连接重置异常。所以我尝试将 spark.network.timeout 增加到 100000,并将 numPartitions 从 200 增加到 400。错误仍然相同。

我还将执行器实例增加到 6 个(我有 2 个工作节点),执行器内存增加到 6gb,驱动程序内存增加到 4gb。我仍然看到同样的问题。

我在读取数据时在这里应用分区以避免数据倾斜。给的内存也很高。

Edit1:由于给定行是我正在运行的唯一代码,因此此处没有数据要驱动程序。

我构建代码的方式有什么问题吗?谁能建议我解决此异常?

最佳答案

您似乎正在使用至少 200 个分区从 SQL Server 读取数据。可能 SQL Server 无法处理如此多的这种大小的并发查询并丢弃/重置连接。

如果是这种情况,那么要解决此问题,您需要减少 Spark 作业的并行性(分区数量可能相同,但执行程序/集群节点的数量较小以减少并发性)或加强(硬件或配置)SQL Server,以便它可以处理更高的负载或更多并发的大型查询。

此外,您可能想尝试在集群上禁用 Conscrypt:Google Dataproc to SQL Server(based on centos 7) connection error?

一般来说,您可能应该使用类似 Apache Sqoop 的东西从 SQL Server 导出数据。

关于apache-spark - 为什么 spark 应用程序崩溃并出现异常 java.net.SocketException : Connection reset even after providing sufficient memory & partitioning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66428095/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com