我不明白的是,当我提交作业并指定:
--num-executors 2
--executor-cores 2
应该只占用4个核心。然而,当提交作业时,它将使用所有16个内核,并跳过num-executors
参数而旋转8个执行器。但是,如果我将executor-cores
参数更改为4
,它将相应地调整,4个executors将向上旋转。
免责声明:我真的不知道--num-executors
是否应该在独立模式下工作。我没见过它用在纱线外面。
注意:正如Marco所指出的--num-executors
在纱线上不再使用。
通过结合spark.cores.max
和spark.executor.cores
,您可以通过静态分配在独立模式下有效地控制执行者的数量(这也适用于Mesos),其中执行者的数量确定为:
floor(spark.cores.max / spark.executor.cores)
--conf "spark.cores.max=4" --conf "spark.executor.cores=2"
需要进行一些运行时澄清。 在我读到的其他地方的一个线程中,有人说Spark Executor应该只分配一个核心。然而,我想知道这是否真的永远是真的。阅读各种so问题和诸如此类的问题,以及Karau、Wendell等人的著作,可以清楚地看到,有相同或相反的专家指出,在某些情况下,每个执行者应该指定更多的内核,但讨论往往更多的是技术性的,而不是功能性的。也就是说,缺少功能性的例子。 > 我的理解是RD
您从哪里开始调优上面提到的params。我们是从执行器内存开始,得到执行器的数目,还是从核心开始,得到执行器的数目。我跟踪了链接。然而得到了一个高水平的想法,但仍然不确定如何或从哪里开始并得出最终结论。
我提出了一个关于Spark的非常愚蠢的问题,因为我想澄清我的困惑。我对Spark非常陌生,仍在努力理解它在内部是如何工作的。 比方说,如果我有一个输入文件列表(假设1000),我想在某个地方处理或写入,并且我想使用coalesce将我的分区数减少到100。 现在我用12个执行器运行这个作业,每个执行器有5个内核,这意味着它运行时有60个任务。这是否意味着,每个任务将在一个单独的分区上独立工作? 回
我有一个Spark集群运行在hdfs之上的纱线模式。我启动了一个带有2个内核和2G内存的worker。然后我提交了一个具有3个核心的1个执行器动态配置的作业。不过,我的工作还能运转。有人能解释启动worker的内核数量和为执行者请求的内核数量之间的差异吗。我的理解是,由于执行者在工人内部运行,他们无法获得比工人可用的资源更多的资源。
Apache Spark:核心数与执行器数 由于每个案例都不一样,我又问了一个类似的问题。 我正在运行一个cpu密集型的应用程序,具有相同数量的核心和不同的执行器。以下是观察结果。 更新 案例3:执行器-12个,每个执行器的核心数-1个,执行器内存-3个,数据处理量-10 GB,分区-36个,作业持续时间:81分钟
> 执行者为每个应用程序。那么工人的角色是什么呢?它是否与执行者协调并将结果反馈给驱动程序?还是司机直接找被执行人对话?如果是的话,那么工人的目的是什么呢? 如何控制申请执行人数? 任务可以在执行器中并行运行吗?如果是,如何配置执行器的线程数? 示例2与示例1相同的集群配置,但我使用以下设置运行一个应用程序--executor-cores10--total-executor-cores10。 示例