Spark 作业速度与 SQL 服务器大小相关
Spark Job Speed Relational To SQL Server Size
我的设置:
- 我有一个 MS SQL 服务器 运行 Azure (V12)
- 我在 Azure HDInsights
中有一个 Spark 集群 运行
- Spark.Version: 1.6.2
- Scala.Version:2.10.5
我正在通过 jdbc 驱动程序从 SQL 服务器提取我的数据(大约 500 万行),然后更新列名。然后我执行我的逻辑。
这是我从服务器读取的方式:
println("SQL Load Start: " + TimeStamp.getCurrentTime.toDateString)
val options: Map[String, String] = Map("url" -> connectionString,
"dbtable" -> ("(SELECT * FROM Data)" + "Data"))
val data = sQLContext.read.format("jdbc").options(options).load()
println("DF Count: " + data.count().toString)
println("Partition Count: " + data.rdd.partitions.length.toString)
println("SQL Load End: " + TimeStamp.getCurrentTime.toDateString)
当我扩展 SQL 服务器时,我的数据被快速读入并且我的逻辑在大约 10 秒内运行。
当 SQL 服务器较小时,我的数据读取速度较慢(预期),但我的逻辑也需要更长的时间(意外)大约 3 - 4 分钟。
簇大小没有变化。
DataFrame 中的分区数似乎没有变化。我只是更改 SQL 服务器的大小。
有人知道为什么我的 Spark 作业的逻辑部分会根据 SQL 服务器的大小而波动吗?
我想通了。我的一位队友让我想起了我在训练中学到的东西。如果您在从 MS SQL 检索数据后不缓存数据,它会在您处理数据时再次检索数据。
更新后的内容可能如下所示:
println("SQL Load Start: " + TimeStamp.getCurrentTime.toDateString)
val options: Map[String, String] = Map("url" -> connectionString,
"dbtable" -> ("(SELECT * FROM Data)" + "Data"))
val data = sQLContext.read.format("jdbc").options(options).load()
data.cache() // NEW CODE
println("DF Count: " + data.count().toString)
println("Partition Count: " + data.rdd.partitions.length.toString)
println("SQL Load End: " + TimeStamp.getCurrentTime.toDateString)
我的设置:
- 我有一个 MS SQL 服务器 运行 Azure (V12)
- 我在 Azure HDInsights 中有一个 Spark 集群 运行
- Spark.Version: 1.6.2
- Scala.Version:2.10.5
我正在通过 jdbc 驱动程序从 SQL 服务器提取我的数据(大约 500 万行),然后更新列名。然后我执行我的逻辑。
这是我从服务器读取的方式:
println("SQL Load Start: " + TimeStamp.getCurrentTime.toDateString)
val options: Map[String, String] = Map("url" -> connectionString,
"dbtable" -> ("(SELECT * FROM Data)" + "Data"))
val data = sQLContext.read.format("jdbc").options(options).load()
println("DF Count: " + data.count().toString)
println("Partition Count: " + data.rdd.partitions.length.toString)
println("SQL Load End: " + TimeStamp.getCurrentTime.toDateString)
当我扩展 SQL 服务器时,我的数据被快速读入并且我的逻辑在大约 10 秒内运行。 当 SQL 服务器较小时,我的数据读取速度较慢(预期),但我的逻辑也需要更长的时间(意外)大约 3 - 4 分钟。
簇大小没有变化。 DataFrame 中的分区数似乎没有变化。我只是更改 SQL 服务器的大小。
有人知道为什么我的 Spark 作业的逻辑部分会根据 SQL 服务器的大小而波动吗?
我想通了。我的一位队友让我想起了我在训练中学到的东西。如果您在从 MS SQL 检索数据后不缓存数据,它会在您处理数据时再次检索数据。
更新后的内容可能如下所示:
println("SQL Load Start: " + TimeStamp.getCurrentTime.toDateString)
val options: Map[String, String] = Map("url" -> connectionString,
"dbtable" -> ("(SELECT * FROM Data)" + "Data"))
val data = sQLContext.read.format("jdbc").options(options).load()
data.cache() // NEW CODE
println("DF Count: " + data.count().toString)
println("Partition Count: " + data.rdd.partitions.length.toString)
println("SQL Load End: " + TimeStamp.getCurrentTime.toDateString)