Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 溢出到磁盘并洗牌写入火花_Apache Spark_Rdd_Shuffle - Fatal编程技术网

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的数据
假设数据持有一个键,执行groupByKey将把所有数据放在一个分区中<代码>随机大小将为9*128MB(9个执行器将其数据传输到最后一个执行器中),并且不会有任何
溢出到磁盘
,因为执行器有100GB的RAM,只有1GB的数据

关于:

附录map
代码(见上文)中所述,此函数为 一个简单的开放哈希表的低级实现,针对 仅附加用例,其中键永远不会被删除,但值 对于每个键都可以更改


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

但是如果没有发生溢出,这意味着聚合记录不会从appendOnlyMap传递?因此,它们将被取消排序?如果没有溢出到磁盘,这意味着执行器可以将整个数据保存在RAM中(请参阅我答案中的边缘案例示例),那么附录映射仅用于溢出?溢出的文件包含稍后要洗牌的记录,或者只是用于精化的对象,不能留在RAM中?我仍然认为这是相关的,因为我认为每个记录都必须从appendOnlyMap传递,请澄清它,谢谢我的怀疑可能来自排序洗牌管理器,在那里查看图像后链接,每个映射任务都有他的appendOnlyMap。@Giorgio-我添加了一个关于
appendOnlyMap