Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在DataRicks上使用df.bulkCopyToSqlDB时,1000万条记录的sql大容量插入永远不会完成_Scala_Apache Spark_Apache Spark Sql_Bulkinsert_Azure Databricks - Fatal编程技术网

Scala 在DataRicks上使用df.bulkCopyToSqlDB时,1000万条记录的sql大容量插入永远不会完成

Scala 在DataRicks上使用df.bulkCopyToSqlDB时,1000万条记录的sql大容量插入永远不会完成,scala,apache-spark,apache-spark-sql,bulkinsert,azure-databricks,Scala,Apache Spark,Apache Spark Sql,Bulkinsert,Azure Databricks,我正在读取1GB的CSV文件(记录数:1000万,列数:13),并试图将其转储到SQL server中。以下为下文的详细信息: CSV文件位置:azure blob存储 代码:Spark+Scala 集群:数据块 尺寸: 用于读取文件并将其转储的代码: val df=spark.read.format(fileparser_-config(“fileFormat”).as[String]).option(header),fileparser_-config(“IsFirstRowHeader

我正在读取1GB的CSV文件(记录数:1000万,列数:13),并试图将其转储到SQL server中。以下为下文的详细信息:

  • CSV文件位置:azure 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])。带列(“\u-ID”,单调递增\u-ID)

    val bulkCopyConfig=Config(映射( “url”->connconconfig(“数据源”)。作为[字符串], “databaseName”->connconConfig(“dbName”).as[String], “用户”->connConfig(“用户名”).as[String], “password”->connconconfig(“password”).as[String], “dbTable”->表名, “bulkCopyBatchSize”->“500000”, “bulkCopyTableLock”->“true”, “bulkCopyTimeout”->“600”))

    println(s“${LocalDateTime.now()}*************sql大容量插入开始*************”)

    df.bulkCopyToSqlDB(bulkCopyConfig)

    println(s“${LocalDateTime.now()}*************sql大容量插入结束***********”)

  • 问题:

集群陷入了困境,我的工作永远无法完成。有一次,当它运行的时间足够长时,它抛出了一个错误

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
  • 群集事件日志:

  • 其他意见:

  • 虽然作业运行很长时间,但集群并不是完全没有响应。我尝试在同一窗口中提交更多的作业。作业运行了,但花费的时间比平时多(约为10倍)
  • 我尝试增加工作节点和节点类型(甚至选择了128 GB节点),但结果仍然是一样的
  • 作业运行时,我尝试使用nolock查询检查SQL表行数。当作业运行时,我在3-4分钟后运行了它,它在表中给了我大约200万条记录。但当我在10分钟后再次运行它时,查询一直在运行,并且从未返回任何记录
  • 我尝试过调整bulkCopyBatchSize属性,但没有多大帮助
  • 我尝试删除sqlinsertion代码,并对从1GB文件创建的数据帧使用聚合操作,整个过程只需40-50秒,因此问题只存在于sql驱动程序/sql server

    • 我也面临同样的问题

      Azure SQL Server-标准S7:800 DTU

      HDInsight-6个节点(2个D13V2头和4个D13V2工作节点)

      数据大小-100GB镶木地板,17亿行

      最初,我使用“bulkCopyTimeout”作为600秒,我观察到加载在超时后重新启动。然后我将超时更改为一个非常大的值,它工作正常

      为了提高绩效:

      在目标表中创建列存储索引并使用

      “bulkCopyBatchSize”=1048576(将整个批次加载到最大容量的行组中,并将其直接压缩到列存储中,而不是加载到增量存储中,然后再压缩)


      “bulkCopyTableLock”=“false”(为了允许并行性)

      我也面临同样的问题

      Azure SQL Server-标准S7:800 DTU

      HDInsight-6个节点(2个D13V2头和4个D13V2工作节点)

      数据大小-100GB镶木地板,17亿行

      最初,我使用“bulkCopyTimeout”作为600秒,我观察到加载在超时后重新启动。然后我将超时更改为一个非常大的值,它工作正常

      为了提高绩效:

      在目标表中创建列存储索引并使用

      “bulkCopyBatchSize”=1048576(将整个批次加载到最大容量的行组中,并将其直接压缩到列存储中,而不是加载到增量存储中,然后再压缩)

      “bulkCopyTableLock”=“false”(为了允许并行性)