Spark执行器上的并发任务



是什么决定了一个Spark执行器上可以并发运行多少任务?也许它是某种线程池和共享内存资源?

什么参数控制这种行为?

这是否意味着执行器中使用的代码应该始终是线程安全的?

是什么决定了一个Spark执行器可以同时运行多少任务?

Spark将特定Executor上的任务数映射到分配给它的核心数。默认情况下,Spark将一个核心分配给由默认为1的spark.task.cpus参数控制的任务。

这是否意味着执行器中使用的代码应该始终是线程安全的?

没有。通常,使用RDD或DataFrame/Set是为了在转换内部进行本地工作,而不共享全局资源。当您有一个全局资源将在单个Executor进程内并行执行时,您应该考虑线程安全,当在同一个Executor上执行多个任务时,可能会发生这种情况。

控制并行执行的相关参数为:

spark.executor.instances->执行的数量

spark.executor.cores->每个执行器的核心数量

spark.task.cpus->每cpu 的任务数

但是,并行执行多个任务并不意味着需要线程安全代码,因为这些任务彼此独立(它们不共享变量(

最新更新