apachespark如何计算分区以及如何在executor中处理分区

kpbwa7wx  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(344)

我需要一些帮助来理解spark是如何决定分区的数量以及如何在executors中处理分区的,我很抱歉这个问题,因为我知道这是一个重复的问题,但是即使在阅读了大量的文章之后,我仍然无法理解我正在使用的一个真实的用例,以及我的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` 分区,这是默认设置吗?
因为我只有一个遗嘱执行人 `200` 分区在单个执行器中并行处理,还是一次处理一个分区?
做 `executor-cores` 是否用于处理每个分区中配置了并发性(即2)的任务(在我的情况下)?
yptwkmov

yptwkmov1#

正如它现在写的Spark将只使用一个分区。
如果您看到200个分区,则表示:
代码中没有显示后续的洗牌(交换)。
使用默认值 spark.sql.shuffle.partitions .
并行性将取决于执行计划和分配的资源。不会高于 min(number-partitions, spark-cores) . 如果只有一个执行器,它将记录集群管理器分配给这个执行器的线程数。

相关问题