Spark:驱动程序日志显示“线程将排序数据溢出到磁盘”

时间:2018-06-11 09:48:16

标签: multithreading scala apache-spark

有人可以帮我理解火花作业日志中出现以下行的可能原因。

  

2018-06-11T05:35:46,181 - INFO [执行任务启动工作人员的任务   328:记录$ class @ 54] - TID 328等待堆上至少1 / 2N   执行池是免费的2018-06-11T05:35:46,182 - INFO [执行人   任务329的任务启动工作者:UnsafeExternalSorter @ 202] - 线程151   将50.0 MB的排序数据溢出到磁盘(目前为20次)

     

2018-06-11T05:35:46,188 - INFO [任务的执行任务启动工作人员   322:UnsafeExternalSorter @ 202] - 线程176溢出33.0的排序数据   MB到磁盘(到目前为止27次)

Spark程序正在运行:

  1. 查询数据库,缓存整个表(缓存2GB)
  2. 按顺序为3个国家(丹麦,印度,新西兰)选择记录
  3. 将数据帧分成500个并传递给map函数,该函数在一个片段中创建一组记录的json并将其发送到搜索服务器
  4. map正在并行集合(Vector)上应用以执行并行处理,我们可以并行发送到搜索服务器进行索引。
  5. 我是Spark的新手,所以请帮助我了解我应该在哪个配置部分停止此溢出。 Spark版本是2.1.1

2 个答案:

答案 0 :(得分:1)

  • 根据日志,您可以对数据进行排序。
  • 在排序期间,没有足够的内存来存储内存中随机播放的辅助数据结构。
  • 因此Spark将数据溢出到磁盘。

答案 1 :(得分:0)

此日志表示没有足够的内存用于任务计算,并且无法将数据交换到磁盘,这是昂贵的操作。 当您在一个或几个执行程序任务中找到此日志时,表明存在数据偏斜,您可能需要查找偏斜关键数据并对其进行预处理。