什么决定了Spark执行器可以同时运行多少任务?也许它是某种线程池和共享内存资源?
哪些参数控制了这种行为?
这是否意味着执行程序中使用的代码应始终编写为线程安全的?
答案 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的任务数
但是并行执行多个任务并不意味着您需要线程安全的代码,因为这些任务彼此独立(它们不共享变量)