Apache spark Spark不使用所有可用的CPU
我正在使用Spark上的Hive运行一个查询,它显示出一些奇怪的行为。我已经运行了多次,观察到了相同的行为。查询:Apache spark Spark不使用所有可用的CPU,apache-spark,hive,Apache Spark,Hive,我正在使用Spark上的Hive运行一个查询,它显示出一些奇怪的行为。我已经运行了多次,观察到了相同的行为。查询: 从大型配置单元外部表读取 Spark可创建约990000个任务 以超过2900个可用CPU的纱线队列运行 使用700个执行器,每个执行器有4个CPU 工作一开始一切顺利。2800 CPU启动约1.5小时后,作业完成约80%(800k/990k任务)。从那以后,事情开始急剧下降:Spark停止使用所有可用的CPU来处理任务。随着190k任务的完成,Spark将逐渐从使用2800个
- 从大型配置单元外部表读取
- Spark可创建约990000个任务
- 以超过2900个可用CPU的纱线队列运行
- 使用700个执行器,每个执行器有4个CPU
- 没有其他工作会抢占其纱线资源。(此外,如果是这样的话,我希望这份工作会随机失去/重新获得资源,而不是在80%的时候失去动力)
- 无论是启用还是禁用动态分配,都会发生这种情况。如果禁用,Spark将在作业的整个运行期间提供所有2800个CPU—它只是不使用它们。如果启用,Spark会降低执行器的速度,因为它决定不再需要它们
- 如果数据倾斜是问题所在,我可以看到一些任务比其他任务需要更长的时间才能完成。但这并不能解释为什么Spark不会使用空闲的CPU来启动积压的任务
spark.locality.wait=0s
可修复此问题。我也不确定为什么3秒的等待会导致Spark调度任务的能力如此之大,但设置为0会使作业运行得非常好