溢出到磁盘并随机写入火花

时间:2017-01-15 13:50:49

标签: apache-spark rdd shuffle

我对spill to diskshuffle write感到困惑。使用默认的Sort shuffle管理器,我们使用appendOnlyMap来聚合和组合分区记录,对吗?然后当执行内存填满时,我们开始排序地图,将其溢出到磁盘,然后清理地图以进行下一次泄漏(如果发生),我的问题是:

  • spill to disk和shuffle write之间有什么区别?它们基本上包括在本地文件系统上创建文件并记录。

  • 承认是不同的,因此Spill记录是排序的,因为它们是通过地图传递的,而不是随机写入记录,因为它们没有从地图传递。

  • 我认为溢出文件的总大小应该等于Shuffle写入的大小,也许我错过了一些东西,请帮助理解那个阶段。

感谢。

乔治

1 个答案:

答案 0 :(得分:13)

spill to diskshuffle write是两件不同的事情

spill to disk - 数据从主机RAM移动到主机磁盘 - 当您的计算机上没有足够的RAM并将其部分RAM放入磁盘时使用

http://spark.apache.org/faq.html

我的数据是否需要适合内存才能使用Spark?

  

没有。 Spark的运营商如果不适合内存,会将数据溢出到磁盘,   允许它在任何大小的数据上运行良好。同样,缓存的数据集   不适合内存的内容要么溢出到磁盘,要么重新计算   需要的时候,由RDD的存储水平决定。

shuffle write - 数据从Executor移动到另一个Executor - 当数据需要在执行程序之间移动时使用(例如由于JOIN,groupBy等)< / p>

可在此处找到更多数据:

可能有助于解决此问题的边缘案例:

  • 你有10个遗嘱执行人
  • 每个具有100GB RAM的执行程序
  • 数据大小为1280MB,并分为10个分区
  • 每个执行者持有128MB的数据。

假设数据包含一个密钥,Performing groupByKey,将把所有数据放入一个分区。 Shuffle size将为9 * 128MB(9个执行程序将其数据传输到最后一个执行程序),并且不会有任何spill to disk,因为执行程序具有100GB的RAM和仅1GB的数据

关于AppendOnlyMap

  

AppendOnlyMap代码中所述(见上文) - 此函数是   优化的简单开放哈希表的低级实现   仅附加用例,其中键永远不会被删除,但值   每个密钥都可以更改。

两个不同模块使用相同的低级功能这一事实并不意味着这些功能在高级别中是相关的。