我正在读取1 GB的CSV文件(记录数:1000万,列:13),并尝试将其转储到SQL Server中。以下是以下详细信息:
CSV文件位置:天蓝色的Blob存储
代码:Spark + Scala
代码用于读取文件并转储它:
val df = spark.read.format(fileparser_config(“ fileFormat”)。as [String])。option(“ header”,fileparser_config(“ IsFirstRowHeader”)。toString).load(fileparser_config(“ FileName”)。 as [String])。withColumn(“ _ ID”,monotonically_increasing_id)
val bulkCopyConfig = Config(Map( “ url”-> connConfig(“ dataSource”)。as [String], “数据库名称”-> connConfig(“ dbName”)。as [String], “用户”-> connConfig(“ userName”)。as [String], “密码”-> connConfig(“密码”).as [字串], “ dbTable”-> tableName, “ bulkCopyBatchSize”->“ 500000”, “ bulkCopyTableLock”->“ true”, “ bulkCopyTimeout”->“ 600”))
println(s“ $ {LocalDateTime.now()} ************ sql批量插入开始************”)
df.bulkCopyToSqlDB(bulkCopyConfig)
println(s“ $ {LocalDateTime.now()} ************ sql批量插入结束************”)
< / li>问题:
集群陷入困境,我的工作从未完成。一次它运行了足够长的时间就引发了错误:
org.apache.spark.SparkException: Job aborted due to stage failure: Task 13 in stage 38.0 failed 4 times, most recent failure: Lost task 13.3 in stage 38.0 (TID 1532, 10.0.6.6, executor 4): com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.\n\tat com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:227)\n\tat com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed(SQLServerConnection.java:796)\n\tat com.microsoft.sqlserver.jdbc.SQLServ
其他观察结果:
答案 0 :(得分:0)
我面临着同样的问题。
Azure SQL Server -标准S7:800个DTU
HDInsight -6个节点(2个D13V2 Head和4个D13V2 Worker)
数据大小-具有17亿行的100GB镶木地板。
最初,我使用“ bulkCopyTimeout” 的时间为600秒,并且观察到超时后加载正在重新开始。然后我将超时值更改为非常大的值,效果很好。
为了提高性能:
在目标表中创建列存储索引并使用
“ bulkCopyBatchSize” = 1048576(将整个批次加载到行组的最大容量中,然后直接将其压缩到列存储中,而不是加载到增量存储中,然后再压缩)
“ bulkCopyTableLock” =“ false”(为了允许并行性)