Dataframe将直接从Executor连接到RDBMS,还是会通过Driver?

时间:2017-02-08 05:57:31

标签: spark-dataframe

在Spark Dataframe中,我正在寻找以下优化内容。

  1. 数据帧是特殊类型的RDD,它内部包含行RDD。这些RowRDD遍布执行程序。
  2. 当我们从执行程序编写这些RowRDD时(尤其是在YARN-CLIENT模式下运行时),行RDD将从EXECUTOR传输到DRIVER,DRIVER使用JDBC连接写入Oracle。(这是真的吗?)
  3. 在YARN-CLUSTER模式下运行相同的代码时,行RDD将直接从Executor写入Oracle。这可能是一种更快的方法,但可用的JDBC连接可能会限制/减慢该过程。
  4. 我不确定这是发生在引擎盖下发生的事情,请对此进行验证并纠正我,如果我错了。这将影响一个重要的性能因素。

    提前致谢。

1 个答案:

答案 0 :(得分:0)

每个执行者都有自己的联系。

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选项。