gpt4 book ai didi

memory-management - Spark 读取大文件

转载 作者:行者123 更新时间:2023-12-04 07:43:10 27 4
gpt4 key购买 nike

这可能是一个愚蠢的问题。我想确保我正确理解了这一点。

当您将一个巨大的文件(400GB)放入一个群集中,其中集体执行程序的内存仅位于120GB周围时,Spark似乎可以永远读取。它不会崩溃,也不会启动第一个 map 作业。

我认为正在发生的事情是,Spark正在通过流读取大文件,并在执行程序内存不足时开始丢弃较旧的行。当开始执行.map代码时,这显然是一个问题,因为执行器jvm将再次从头读取文件。但我想知道,Spark是否以某种方式将数据溢出到硬盘上,类似于随机溢出机制。

注意,我指的不是缓存过程。这与使用sc.textFile(filename)

最佳答案

sc.textFile没有开始任何阅读。它仅定义了一个可用于进一步处理的驱动程序驻留数据结构。

直到在RDD上调用 Action 后,Spark才会制定一种策略来执行所有必需的转换(包括读取),然后返回结果。

如果有一个调用该操作的操作来运行该序列,并且读取后的下一个转换是映射,那么Spark将需要读取文件的一小部分行(根据基于核数的分区策略),并且然后立即开始对其进行映射,直到需要将结果返回给驱动程序为止,或者在下一个转换序列之前进行随机播放。

如果您的分区策略(defaultMinPartitions)似乎淹没了工作人员,因为分区的Java表示(HDFS术语中的InputSplit)大于可用的执行程序内存,那么您需要指定要读取的分区数作为第二个参数textFile。您可以通过将文件大小除以目标分区大小(允许内存增加)来计算理想的分区数。可以读取文件的简单检查是:

sc.textFile(file, numPartitions)
.count()

另外,请检查以下问题: run reduceByKey on huge data in spark

关于memory-management - Spark 读取大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31106899/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com