spark SQL如何访问数据库

spark SQL如何访问数据库,sql,apache-spark,Sql,Apache Spark,假设您使用spark SQL访问SQL数据库。 使用RDD spark将数据划分为许多不同的部分,这些部分共同构成数据集 我的问题是Spark SQL如何管理从N个节点到数据库的访问。我可以看到几种可能性: RDD的每个节点都访问数据库并构建它们的部分。它的优点是,节点不必分配大量内存,但数据库必须有N个连接,其中N个连接可能非常大 单个节点访问数据,并根据需要将数据发送给其他N-1个节点。问题是,这个节点将需要拥有所有数据,而这在许多情况下是不可行的。通过分块获取数据,可能可以缓解这一问题 J

假设您使用spark SQL访问SQL数据库。 使用RDD spark将数据划分为许多不同的部分,这些部分共同构成数据集

我的问题是Spark SQL如何管理从N个节点到数据库的访问。我可以看到几种可能性:

  • RDD的每个节点都访问数据库并构建它们的部分。它的优点是,节点不必分配大量内存,但数据库必须有N个连接,其中N个连接可能非常大

  • 单个节点访问数据,并根据需要将数据发送给其他N-1个节点。问题是,这个节点将需要拥有所有数据,而这在许多情况下是不可行的。通过分块获取数据,可能可以缓解这一问题

  • JDBC包使用池连接以避免一次又一次的连接。但这并不能解决这个问题


    解释spark如何管理对SQL数据库的访问的参考资料是什么?其中有多少可以参数化?

    这在数据源文档页面上有详细的说明

    简而言之,作业中涉及的每个节点都将建立到数据库的连接。但是,决定连接数的不是节点数,而是配置的分区数:

    numPartitions
    :可用于表读写并行性的最大分区数这还决定了并发JDBC连接的最大数量。如果要写入的分区数超过此限制,则在写入之前通过调用coalesce(numPartitions)将其减少到此限制

    关于

    JDBC包使用池连接以避免一次又一次的连接。但这并不能解决这个问题

    JDBC驱动程序不会隐式地共享连接。应用程序设置、配置和使用连接池。除非Spark需要重复连接数据库以获取数据,否则它不需要为每个分区建立多个连接。因此,不需要共用连接

    链接的文档页面有一个选项列表,应用程序可以使用这些选项来控制如何从数据库中获取数据