【发布时间】: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
问题:
spark 是如何提出
200分区的,这是默认设置吗?由于我只有 1 个执行器,
200分区是在单个执行器中并行处理还是一次处理一个分区?executor-cores是否用于在每个分区中使用配置的并发处理任务,即 2(在我的情况下)?
【问题讨论】:
标签: mysql hadoop apache-spark spark-dataframe