在我看来,两个相关参数是spark.default.parallelism
和spark.cores.max
。
spark.default.parallelism
设置内存数据的分区数,spark.cores.max
设置可用CPU核心数。但是,在传统的并行计算中,我会特别推出一些线程。
无论可用核心数量多少,Spark都会为每个分区启动一个线程吗?如果有100万个分区,Spark会将线程数限制为可用内核数量的合理倍数吗?
如何确定线程数?
答案 0 :(得分:1)
在我看来,两个相关参数是
spark.default.parallelism
和spark.cores.max
。
几乎完全无关紧要。
每个工作者的数据处理线程数主要取决于三个因素:
特定工作人员宣传的核心(线程)数量。
这是当时使用的最大线程数,不包括用于辅助目的的线程。由独立模式下的CORES
(广告并行化功能)和其他集群管理器中的等效属性决定。
此工作程序分配给执行程序的核心数。
这是活动应用程序实际可以使用的最大线程数(小于或等于第一个数字)。
分配给此特定工作程序的执行程序上计划的活动任务数。
这是当时使用的实际线程数。小于或等于之前的数字。
这假定应用程序是诚实的,并且仅使用分配的核心和任务不尝试启动线程,这些线程尚未被spark.task.cpus
请求。