在spark java中创建和管理jdbc连接的正确方法

在spark java中创建和管理jdbc连接的正确方法,java,apache-spark,jdbc,Java,Apache Spark,Jdbc,我正在用java构建一个spark应用程序,它将从多个表中获取记录并将它们存储在spark数据集中,然后在DB中多次操作和更新这些记录 目前,我已经创建了一个广播映射,其中包含数据库属性(url、用户、pass等),在每个方法中,我都创建了一个新的连接,使用它在jdbc中运行sql查询。请注意,这发生在不同类中的许多方法中 我需要一种有效的方法来管理jdbc连接,这样它就不会创建多个连接,从而影响生产数据库的性能。是否有一种方法可以一次性初始化Hikari池并将其发送到所有执行器/工作节点?或者

我正在用java构建一个spark应用程序,它将从多个表中获取记录并将它们存储在spark数据集中,然后在DB中多次操作和更新这些记录

目前,我已经创建了一个广播映射,其中包含数据库属性(url、用户、pass等),在每个方法中,我都创建了一个新的连接,使用它在jdbc中运行sql查询。请注意,这发生在不同类中的许多方法中


我需要一种有效的方法来管理jdbc连接,这样它就不会创建多个连接,从而影响生产数据库的性能。是否有一种方法可以一次性初始化Hikari池并将其发送到所有执行器/工作节点?或者任何其他有效的方式都是受欢迎的。

这是一个好问题,我从未见过有人在使用spark时创建连接池。连接池很容易在任何java应用程序中创建,也可以使用任何库,但是,在运行时通过不同的JVM使其可用(类似于数据广播以避免网络调用)可能很棘手。我更喜欢在驱动程序中加载小数据并广播它们,这将避免所有连接,但连接池将增加价值。连接池只会节省建立连接的时间,这在OLTP用例中很重要。您好,谢谢您的输入。我得到了你的建议,但问题是应用程序在多个地方使用了sparkmap方法,在这些地方我有jdbc更新的逻辑。所以广播数据集对我来说不太可行。我的想法是在每个方法中使用一个连接,并在jdbc中批量运行查询。这会比当前的有点效率吗?这是一个好问题,我从未见过有人在使用spark时创建连接池。连接池很容易在任何java应用程序中创建,也可以使用任何库,但是,在运行时通过不同的JVM使其可用(类似于数据广播以避免网络调用)可能很棘手。我更喜欢在驱动程序中加载小数据并广播它们,这将避免所有连接,但连接池将增加价值。连接池只会节省建立连接的时间,这在OLTP用例中很重要。您好,谢谢您的输入。我得到了你的建议,但问题是应用程序在多个地方使用了sparkmap方法,在这些地方我有jdbc更新的逻辑。所以广播数据集对我来说不太可行。我的想法是在每个方法中使用一个连接,并在jdbc中批量运行查询。这会比现在的有点效率吗?