Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark不使用所有可用的CPU_Apache Spark_Hive - Fatal编程技术网

Apache spark Spark不使用所有可用的CPU

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上的Hive运行一个查询,它显示出一些奇怪的行为。我已经运行了多次,观察到了相同的行为。查询:

  • 从大型配置单元外部表读取
  • Spark可创建约990000个任务
  • 以超过2900个可用CPU的纱线队列运行
  • 使用700个执行器,每个执行器有4个CPU
工作一开始一切顺利。2800 CPU启动约1.5小时后,作业完成约80%(800k/990k任务)。从那以后,事情开始急剧下降:Spark停止使用所有可用的CPU来处理任务。随着190k任务的完成,Spark将逐渐从使用2800个CPU下降到两位数(通常在总共20个CPU左右见底)。这使得最后的190k任务比之前的800k任务需要更长的时间才能完成

我可以看到,随着工作接近完成,Spark将无法在大量CPU上并行化少量剩余任务。但由于还有190k个任务要开始,这似乎为时尚早

我检查过的东西:

  • 没有其他工作会抢占其纱线资源。(此外,如果是这样的话,我希望这份工作会随机失去/重新获得资源,而不是在80%的时候失去动力)
  • 无论是启用还是禁用动态分配,都会发生这种情况。如果禁用,Spark将在作业的整个运行期间提供所有2800个CPU—它只是不使用它们。如果启用,Spark会降低执行器的速度,因为它决定不再需要它们
  • 如果数据倾斜是问题所在,我可以看到一些任务比其他任务需要更长的时间才能完成。但这并不能解释为什么Spark不会使用空闲的CPU来启动积压的任务
有人有什么建议吗?

给子孙后代,答案就在这里

设置
spark.locality.wait=0s
可修复此问题。我也不确定为什么3秒的等待会导致Spark调度任务的能力如此之大,但设置为0会使作业运行得非常好