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

Ama*_*don 5 multithreading scala apache-spark

有人可以帮助我了解 Spark 作业日志中出现以下几行的可能原因吗?

2018-06-11T05:35:46,181 - INFO [任务 328 的执行器任务启动工作线程:Logging$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 块,并将其传递给映射函数,该函数在一块中创建一组记录的 json 并将其发送到搜索服务器
  4. map 应用于并行集合(Vector)来执行并行处理,我们可以并行发送到搜索服务器进行索引。

我是 Spark 的新手,所以请帮助我了解我应该寻找配置的哪一部分来阻止这种溢出。Spark版本是2.1.1

小智 2

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