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
。
Task
在Executor
上执行。 --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”,