Apache spark 溢出到磁盘并洗牌写入火花
我对Apache spark 溢出到磁盘并洗牌写入火花,apache-spark,rdd,shuffle,Apache Spark,Rdd,Shuffle,我对溢出到磁盘和无序写入感到困惑。使用默认的排序无序管理器,我们使用appendOnlyMap来聚合和组合分区记录,对吗?然后,当执行内存填满时,我们开始对映射进行排序,将其溢出到磁盘,然后为下一次溢出清理映射(如果发生),我的问题是: 溢出到磁盘和随机写入之间有什么区别?它们基本上包括在本地文件系统上创建文件和记录 承认是不同的,所以溢出记录被排序,因为它们通过映射传递,而不是洗牌写入记录否,因为它们不从映射传递 我的想法是溢出文件的总大小应该等于随机写入的大小,也许我遗漏了什么,请帮助理解
溢出到磁盘
和无序写入
感到困惑。使用默认的排序无序管理器,我们使用appendOnlyMap
来聚合和组合分区记录,对吗?然后,当执行内存填满时,我们开始对映射进行排序,将其溢出到磁盘,然后为下一次溢出清理映射(如果发生),我的问题是:
- 溢出到磁盘和随机写入之间有什么区别?它们基本上包括在本地文件系统上创建文件和记录
- 承认是不同的,所以溢出记录被排序,因为它们通过映射传递,而不是洗牌写入记录否,因为它们不从映射传递
- 我的想法是溢出文件的总大小应该等于随机写入的大小,也许我遗漏了什么,请帮助理解该阶段
Giorgio和shuffle write是两件不同的事情
溢出到磁盘
-数据从主机RAM移动到主机磁盘-在您的计算机上没有足够的RAM时使用,并将其部分RAM放入磁盘中
我的数据是否需要存储在内存中才能使用Spark?
不,Spark的操作员会将数据泄漏到磁盘,如果磁盘不适合内存,
允许它在任何大小的数据上运行良好。同样,缓存的数据集
内存中不适合的数据要么溢出到磁盘,要么重新计算
根据RDD的存储级别,在需要时飞行
shuffle write
-数据从一个或多个执行器移动到另一个执行器-当数据需要在执行器之间移动时使用(例如,由于加入、分组等原因)
更多数据可在此处找到:
- 你有10个遗嘱执行人
- 每个执行器具有100GB RAM
- 数据大小为1280MB,分为10个分区
- 每个执行器拥有128MB的数据李>
溢出到磁盘
,因为执行器有100GB的RAM,只有1GB的数据
关于:
如附录map
代码(见上文)中所述,此函数为
一个简单的开放哈希表的低级实现,针对
仅附加用例,其中键永远不会被删除,但值
对于每个键都可以更改
两个不同的模块使用相同的低级函数这一事实并不意味着这些函数在高级中是相关的。但是如果没有发生溢出,这意味着聚合记录不会从appendOnlyMap传递?因此,它们将被取消排序?如果没有溢出到磁盘,这意味着执行器可以将整个数据保存在RAM中(请参阅我答案中的边缘案例示例),那么附录映射仅用于溢出?溢出的文件包含稍后要洗牌的记录,或者只是用于精化的对象,不能留在RAM中?我仍然认为这是相关的,因为我认为每个记录都必须从appendOnlyMap传递,请澄清它,谢谢我的怀疑可能来自排序洗牌管理器,在那里查看图像后链接,每个映射任务都有他的appendOnlyMap。@Giorgio-我添加了一个关于
appendOnlyMap