【问题标题】:Dataframe will directly connect to RDBMS from Executor or it will go through Driver?Dataframe 将直接从 Executor 连接到 RDBMS 还是通过 Driver?
【发布时间】:2017-08-25 06:30:15
【问题描述】:

在 Spark Dataframe 中,我正在寻找以下优化解释。

  1. Data Frames 是特殊类型的 RDD,它内部包含 Row RDD。这些 RowRDD 分布在 executor 中。
  2. 当我们从 executor 写入这些 RowRDD 时(尤其是在 YARN-CLIENT 模式下运行时),Row RDD 将从 EXECUTOR 传输到 DRIVER,并且 DRIVER 使用 JDBC 连接写入 Oracle。(这是真的吗?)
  3. 在 YARN-CLUSTER 模式下运行相同的代码时,Row RDD 会直接从 Executor 写入 Oracle。这可能是一种更快的方法,但可用的 JDBC 连接可能会限制/减慢该过程。

我不确定这是幕后发生的事情,如果我错了,请验证并纠正我。这将影响很大的性能因素。

提前致谢。

【问题讨论】:

    标签: spark-dataframe


    【解决方案1】:

    每个执行器都有自己的连接。

    val df = (spark.read.jdbc(url=jdbcUrl,
        dbtable="employees",
        columnName="emp_no",
        lowerBound=1L,
        upperBound=100000L,
        numPartitions=100,
        connectionProperties=connectionProperties))
    display(df)
    

    在 Spark UI 中,您会看到 numPartitions 指示启动的任务数。每个任务都分布在执行程序中,这可以通过 JDBC 接口增加读取和写入的并行性。查看上游指南以了解其他有助于提高性能的参数,例如 fetchsize 选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 2012-01-24
      • 2021-02-04
      • 1970-01-01
      • 2021-01-10
      相关资源
      最近更新 更多