假设我有一台16核的机器,每个核有2个逻辑处理器。如果我将“--num-executors”设置为2,将“--executor-core”设置为3。那么在每个节点中将有2个执行器,每个执行器使用3个核。因此,每个执行器可以并行运行(2*3=6)6个任务。现在spark是否在每个内核中创建单独的线程来使用每个内核中存在的逻辑处理器?我的问题是,这种并行性是发生在物理内核级别还是逻辑处理器级别?
假设我有一台16核的机器,每个核有2个逻辑处理器。如果我将“--num-executors”设置为2,将“--executor-core”设置为3。那么在每个节点中将有2个执行器,每个执行器使用3个核。因此,每个执行器可以并行运行(2*3=6)6个任务。现在spark是否在每个内核中创建单独的线程来使用每个内核中存在的逻辑处理器?我的问题是,这种并行性是发生在物理内核级别还是逻辑处理器级别?
1条答案
按热度按时间csga3l581#
在Apache Spark中,并行发生在任务级别,而不是核心级别。当您将
--num-executors
参数设置为2,--executor-cores
参数设置为3时,这意味着每个执行器将分配有3个核心,每个节点上将运行2个执行器。此配置将允许每个执行器并行运行多达6个任务。但是,每个执行器内的并行度将取决于您的数据中的分区数以及在不超过可用内核总数的情况下可以并行运行的任务数,例如,如果您有16个分区和6个内核可用,Spark将调度6个任务并行运行,其余任务将排队等待其中一个正在运行的任务完成。
关于逻辑处理器的问题,Spark不会在每个内核中创建单独的线程来使用逻辑处理器。操作系统管理逻辑处理器到线程的分配,Spark将每个逻辑处理器视为单独的内核。因此,在您的示例中,Spark将看到16个内核和32个逻辑处理器。当您为每个执行器分配3个内核时,每个执行器将使用6个逻辑处理器。2 Spark将根据可用逻辑处理器的数量来调度任务,而不是物理核的数量。