我对spill to disk
和shuffle write
感到困惑。使用默认的Sort shuffle管理器,我们使用appendOnlyMap
来聚合和组合分区记录,对吗?然后当执行内存填满时,我们开始排序地图,将其溢出到磁盘,然后清理地图以进行下一次泄漏(如果发生),我的问题是:
spill to disk和shuffle write之间有什么区别?它们基本上包括在本地文件系统上创建文件并记录。
承认是不同的,因此Spill记录是排序的,因为它们是通过地图传递的,而不是随机写入记录,因为它们没有从地图传递。
感谢。
乔治
答案 0 :(得分:13)
spill to disk
和shuffle write
是两件不同的事情
spill to disk
- 数据从主机RAM移动到主机磁盘 - 当您的计算机上没有足够的RAM并将其部分RAM放入磁盘时使用
http://spark.apache.org/faq.html
我的数据是否需要适合内存才能使用Spark?
没有。 Spark的运营商如果不适合内存,会将数据溢出到磁盘, 允许它在任何大小的数据上运行良好。同样,缓存的数据集 不适合内存的内容要么溢出到磁盘,要么重新计算 需要的时候,由RDD的存储水平决定。
shuffle write
- 数据从Executor移动到另一个Executor - 当数据需要在执行程序之间移动时使用(例如由于JOIN,groupBy等)< / p>
可在此处找到更多数据:
可能有助于解决此问题的边缘案例:
假设数据包含一个密钥,Performing groupByKey,将把所有数据放入一个分区。 Shuffle size
将为9 * 128MB(9个执行程序将其数据传输到最后一个执行程序),并且不会有任何spill to disk
,因为执行程序具有100GB的RAM和仅1GB的数据
如
AppendOnlyMap
代码中所述(见上文) - 此函数是 优化的简单开放哈希表的低级实现 仅附加用例,其中键永远不会被删除,但值 每个密钥都可以更改。
两个不同模块使用相同的低级功能这一事实并不意味着这些功能在高级别中是相关的。