Spark jdbc重用连接

时间:2016-10-12 10:12:38

标签: java jdbc apache-spark

在我的spark应用程序中,我使用以下代码使用JDBC驱动程序从sql server数据库中检索数据。

 Dataset<Row> dfResult= sparksession.read().jdbc("jdbc:sqlserver://server\dbname", tableName,partitionColumn, lowerBound, upperBound, numberOfPartitions, properties);

并在dfResult数据集上使用map操作。

在独立模式下运行应用程序时,我看到spark为每个rdd创建了唯一的连接。从Api描述中,我理解spark负责关闭连接。

我是否知道是否有办法重用连接而不是为每个rdd分区打开和关闭jdbc连接?

由于

1 个答案:

答案 0 :(得分:3)

即使您通过API手动将数据推送到数据库中,我也经常看到建议,即每个分区创建一个连接。

# pseudo-code
rdd.foreachPartition(iterator =>
  connection = SomeAPI.connect()
  for i in iterator:
    connection.insert(i)
)

所以,如果jdbc对象已经这样做了,那么必须确认模式应该是这样的。

以下是推荐使用此模式的另一个示例:

enter image description here

http://www.slideshare.net/databricks/strata-sj-everyday-im-shuffling-tips-for-writing-better-spark-programs幻灯片27

我认为这是推荐模式的原因是因为当您在多节点集群中工作时,您永远不知道将在哪个节点上评估特定分区,因此,您需要确保它有一个DB连接。