【问题标题】:How Apache spark calculates partitions and how partitions are processed in executorApache spark如何计算分区以及在executor中如何处理分区
【发布时间】:2017-09-01 15:08:49
【问题描述】:

我需要一些帮助来了解 Spark 如何决定分区的数量以及它们在执行程序中是如何处理的,我很抱歉这个问题,因为我知道这是一个重复的问题,但即使在阅读了很多文章之后我仍然不是能够理解我正在放置一个我目前正在使用的现实生活用例,以及我的 spark 提交配置和集群配置。

我的硬件配置:

3 Node machine with total Vcores=30 and Total Memory=320 GB.

spark-submit config:

spark-submit \
--verbose \
--master yarn \
--deploy-mode cluster \
--num-executors 1  \
--executor-memory 3g \
--executor-cores 2 \
--conf spark.yarn.maxAppAttempts=1 \
--conf spark.yarn.am.attemptFailuresValidityInterval=1h \
--conf spark.driver.memory=1000m \
--conf spark.speculation=true \

我正在使用 spark dataframe Jdbc api 从 MySql 数据库中读取数据:

val jdbcTable= sqlContext.read.format("jdbc").options(
            Map(
              "url" -> jdcbUrl,
              "driver" -> "net.sourceforge.jtds.jdbc.Driver",
              "dbtable" ->
                s"(SELECT * FROM SOMETHING WHERE COLUMN > ${lastExtractUnixTime}) as t"))
            .load

jdbcTable DATAFRAME 创建的分区总数为200

问题:

  1. spark 是如何提出200 分区的,这是默认设置吗?

  2. 由于我只有 1 个执行器,200 分区是在单个执行器中并行处理还是一次处理一个分区?

  3. executor-cores 是否用于在每个分区中使用配置的并发处理任务,即 2(在我的情况下)?

【问题讨论】:

    标签: mysql hadoop apache-spark spark-dataframe


    【解决方案1】:
    • 正如现在所写的 Spark will use 1 partition only
    • 如果您看到 200 个分区,则表示:

      • 代码中没有显示后续的shuffle(交换)。
      • 您使用spark.sql.shuffle.partitions 的默认值。
    • 并行度取决于执行计划和分配的资源。它不会高于min(number-partitions, spark-cores)。如果只有一个执行器,它将由集群管理器分配给该执行器的线程数。

    【讨论】:

      猜你喜欢
      • 2018-02-16
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 2015-05-02
      • 2017-05-03
      • 1970-01-01
      相关资源
      最近更新 更多