【发布时间】:2019-01-24 21:38:07
【问题描述】:
要求进行一些运行时说明。
在我阅读的其他地方的一个线程中,有人说 Spark 执行器应该只分配一个核心。但是,我想知道这是否真的总是如此。阅读各种 SO 问题等,以及 Karau、Wendell 等人,很明显,有平等和相反的专家表示在某些情况下应该为每个 Executor 指定更多的核心,但讨论往往更多技术大于功能。也就是说,缺少功能性的例子。
-
我的理解是,RDD 或 DF、DS 的分区由单个 Executor 提供服务。好吧,没问题,完全有道理。那么,Partition 如何从多个 Core 中受益呢?
如果我有一个 map,然后是一个 filter,这不是两个可以交错的任务 - 就像 Informatica 所做的那样,如我的理解是它们融合在一起。既然如此,那么分配的 Executor 运行更多 Core 的好处是什么?
来自 JL:换句话说,任务是对 Spark 作业中 RDD 阶段中 RDD 分区中记录的计算。从功能上讲,在实践中是什么意思?
另外,如果不能获取所有Cores,是否可以分配Executor?我认为有一个等待期,一段时间后它可能会以更有限的容量分配。是吗?
-
从对 SO 的高度评价答案What is a task in Spark? How does the Spark worker execute the jar file? 中陈述如下:当您创建 SparkContext 时,每个工作人员都会启动一个执行程序。来自另一个 SO 问题:创建 SparkContext 时,每个工作节点都会启动一个执行程序。
不确定我是否遵循这些断言。如果 Spark 事先不知道分区数量等,为什么这么早就分配 Executor?
我问这个问题,因为即使是这篇出色的帖子 How are stages split into tasks in Spark? 也没有给出每个执行器多个核心的实际示例。我可以清楚地遵循帖子,它符合我对每个执行器 1 个核心的理解。
【问题讨论】:
标签: apache-spark