gpt4 book ai didi

apache-spark - 当文件无法容纳在Spark的主内存中时,Spark如何读取大文件(PB)

转载 作者:行者123 更新时间:2023-12-04 02:31:35 24 4
gpt4 key购买 nike

在这种情况下,大文件会发生什么?

1)Spark从NameNode获取数据位置。 Spark是否会在同一时间停止,因为根据NameNode的信息,数据大小太长?

2)Spark根据数据节点块大小对数据进行分区,但是无法将所有数据存储到主存储器中。在这里,我们不使用StorageLevel。那么这里会发生什么呢?

3)Spark对数据进行分区,一旦该主存储器中的数据再次处理,一些数据将存储在主存储器中。spark将从磁盘加载其他数据。

最佳答案

首先,Spark仅在调用某个 Action (例如countcollectwrite)时才开始读取数据。调用 Action 后,Spark会在分区中加载数据-同时加载的分区数取决于您拥有的核心数。因此,在Spark中,您可以想到1个分区= 1个核心= 1个任务。请注意,所有同时加载的分区都必须适合内存,否则您将获得OOM。

假设您有多个阶段,Spark然后仅在加载的分区上从第一阶段运行转换。将转换应用于已加载分区中的数据后,它将输出存储为随机数据,然后在更多分区中读取。然后,它将转换应用于这些分区,将输出存储为随机数据,在更多分区中进行读取,依此类推,直到读取完所有数据。

如果您不进行任何转换而仅执行count,Spark仍将读取分区中的数据,但不会在集群中存储任何数据,如果再次执行count,它将再次读取所有数据。为了避免多次读取数据,您可以调用cachepersist,在这种情况下,Spark会尝试将数据存储在集群中。在cache(与persist(StorageLevel.MEMORY_ONLY)相同)上,它将所有分区存储在内存中-如果它不适合存储在内存中,则会得到一个OOM。如果调用persist(StorageLevel.MEMORY_AND_DISK),它将在内存中存储尽可能多的分区,其余分区将如果磁盘上无法容纳数据,则操作系统通常会杀死您的工作人员。

请注意,Spark有自己的内存管理系统。如果调用cachepersist,分配给Spark作业的某些内存将用于保存正在处理的数据,而某些内存将用于存储。

我希望这个解释有帮助:)

关于apache-spark - 当文件无法容纳在Spark的主内存中时,Spark如何读取大文件(PB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46638901/

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