Spark执行器上的并发任务

时间:2016-11-05 21:47:30

标签: scala apache-spark

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

哪些参数控制了这种行为?

这是否意味着执行程序中使用的代码应始终编写为线程安全的?

2 个答案:

答案 0 :(得分:1)

  

什么决定了在Spark执行器上可以同时运行多少任务?

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

  

这是否意味着执行程序中使用的代码应始终编写为线程安全的?

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

答案 1 :(得分:1)

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

spark.executor.instances - >执行人数

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

spark.task.cpus - >每个CPU的任务数

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