spark-submit 中的 num-executors、executor-cores、executor-memory 与 spark.read 中的 option(“numPartitions”,

Posted

技术标签:

【中文标题】spark-submit 中的 num-executors、executor-cores、executor-memory 与 spark.read 中的 option(“numPartitions”,x) 有啥区别? [复制]【英文标题】:What is the difference between num-executors,executor-cores,executor-memory in spark-submit from option(“numPartitions”,x) in spark.read? [duplicate]spark-submit 中的 num-executors、executor-cores、executor-memory 与 spark.read 中的 option(“numPartitions”,x) 有什么区别? [复制] 【发布时间】:2018-09-18 08:56:04 【问题描述】:

我在 PostgreSQL DB 上读取了一个 RDBMS 表:

val dataDF    = spark.read.format("jdbc").option("url", connectionUrl)
                            .option("dbtable", s"($execQuery) as year2017")
                            .option("user", devUserName)
                            .option("password", devPassword)
                            .option("numPartitions",10)
                            .load()

选项:numPartitions 表示您的数据被分割成的分区数,然后以并行方式处理每个分区,在本例中为:10。我认为这是 spark 中的一个很酷的选项,直到我遇到了令人敬畏的功能火花提交:--num-executors,--executor-cores,--executor-memory。我从这个链接阅读了 spark-submit 中上述三个参数的概念:here

我不明白的是,如果两者都用于并行处理,那么两者之间有什么不同?

谁能告诉我上述选项之间的区别?

【问题讨论】:

【参考方案1】:

read.jdbc(..numPartitions..) 中,numPartitions 是您的数据(数据帧/数据集)具有的分区数。换句话说,读取数据帧上的所有后续操作都将具有等于numPartitions 的并行度。 (此选项还控制与 JDBC 源建立的并行连接数。)

要了解--num-executors--executor-cores--executor-memory,您应该了解Task 的概念。您对数据框(或数据集)执行的每个操作都会转换为数据框分区上的Task。因此,每个数据分区上的每个操作都存在一个Task

TaskExecutor 上执行。 --num-executors 控制 Spark 生成的执行器数量;因此这控制了您的Tasks 的并行性。另外两个选项--executor-cores--executor-memory 控制您提供给每个执行程序的资源。除其他外,这取决于您希望在每台机器上拥有的执行器数量。

P.S:这假设您正在手动分配资源。 Spark 也能够dynamic allocation。

有关这方面的更多信息,您可以使用以下链接:

Spark Configuration Related *** Post

编辑:

以下声明有一个重要的警告:

对读取的 Dataframe 的所有后续操作都将具有等于 numPartitions 的并行度。

连接和聚合等操作(涉及洗牌)以及union(不洗牌数据)等操作可能会改变分区因子。

【讨论】:

好的。所以这两个是相互独立的吧? 在某种程度上,是的。分区的数量控制并行度。上述执行器配置控制分区上执行的交错方式。 all subsequent operations on the read Dataframe will have a degree of parallelism equal to numPartitions这不是真的,某些操作(shuffles)会改变分区数 我同意。我应该提到一个警告,如joins 或聚合(涉及随机播放)以及union(不涉及随机播放)等操作可能会改变分区因子。将编辑答案。谢谢你,@RaphaelRoth。

以上是关于spark-submit 中的 num-executors、executor-cores、executor-memory 与 spark.read 中的 option(“numPartitions”,的主要内容,如果未能解决你的问题,请参考以下文章

num-executors可以覆盖spark-submit中的动态分配

线程“main”java.sql.SQLException 中的异常:运行 spark-submit 时没有合适的驱动程序

spark-submit 中的 num-executors、executor-cores、executor-memory 与 spark.read 中的 option(“numPartitions”,

在 AWS EMR 中使用 spark-submit 启动 Python 应用程序

Spark 应用程序部署工具spark-submit

Spark-Submit 错误:名称或服务未知