pyspark java.lang.OutOfMemoryError:超出GC开销限制



我正在尝试使用spark处理10GB的数据,它给了我这个错误,

java.lang.OutOfMemoryError:超出GC开销限制

笔记本电脑配置为:4CPU,8个逻辑核,8GB RAM

提交火花作业时的火花配置。

spark = SparkSession.builder.master('local[6]').config("spark.ui.port", "4041").appName('test').getOrCreate()
spark.conf.set("spark.executor.instances", 1)
spark.conf.set("spark.executor.cores", 5)

在互联网上搜索这个错误后,我有几个问题

如果得到回答,那将是一个很大的帮助。

1( Spark是内存计算引擎,对于处理10gb的数据,系统应该有10+gb的RAM。Spark将10gb的数据加载到10+gb的RAM内存中,然后完成这项工作?

2( 如果第1点是正确的,那么大公司处理100 TB数据的方式是什么?他们是否通过集群多个系统来形成100 TB以上的RAM,然后处理100 TB的数据?

3( 通过设置适当的火花配置,他们是否没有其他方法来处理8gb RAM和8Cores的50gb数据?如果是什么方式,应该是什么火花配置。

4( 如果系统性能为8gb RAM和8核,那么理想的火花配置应该是什么?用于处理8gb的数据

火花配置将在火花配置中定义。

spark = SparkSession.builder.master('local[?]').config("spark.ui.port", "4041").appName('test').getOrCreate()
spark.conf.set("spark.executor.instances", ?)
spark.conf.set("spark.executor.cores", ?)

spark.executes.cores=?

spark.executes.memory=?

spark.yarn.exexecute.memoryOverhead=?

spark.driver.memory=?

spark.driver.cores=?

spark.executer.instances=?

核心实例数=?

spark.default.parallleism=?

如果不能澄清一切,我希望以下内容会有所帮助。

1(Spark是一个内存计算引擎,为了处理10 GB的数据,系统应该有10 GB以上的RAM。Spark将10gb的数据加载到10+GB的RAM内存中,然后完成这项工作?

Spark是一个内存计算引擎,它从底层数据湖或分布式存储系统获取输入/源。10Gb文件将被分成更小的块(对于基于Hadoop的数据湖,块大小为128Mb或256Mb(,Spark Driver将获得许多执行器/内核来从集群的工作节点读取它们。如果你试图用笔记本电脑或单个节点加载10Gb数据,它肯定会耗尽内存。在处理之前,它必须将所有数据加载到一台机器或多个从属/工作节点中。

2(如果第1点是正确的,那么大公司处理100 TB数据的方式是什么?他们是否通过集群多个系统来形成100 TB以上的RAM,然后处理100 TB的数据?

大型数据处理项目用大量的设计模式设计存储和访问层。它们只是不将GB或TB的数据转储到像HDFS这样的文件系统中。它们使用分区(就像销售交易数据是按月/周/天分区一样(,对于结构化数据,有不同的文件格式可用(尤其是列格式(,这有助于只填充处理所需的列。因此,正确的文件格式、分区和压缩是大文件的关键特性。

3(通过设置适当的火花配置,他们是否没有其他方法来处理8gb RAM和8核的50gb数据?如果是什么方式,应该是什么火花配置。

如果没有分区,但有一些方法,则不太可能。它还取决于它是什么类型的文件。你可以创建一个自定义的流文件读取器,可以读取逻辑块并对其进行处理。然而,企业不会读取50Gb的单个文件,即一个单元。即使您通过Office工具在机器中加载10Gb的excel文件,它也会耗尽内存。

4(如果系统属性为8gb RAM和8核,那么理想的火花配置应该是什么?用于处理8gb的数据

保留1个核心&操作系统为1-Gb或2-Gb,其余部分用于处理。现在,根据正在执行的转换类型,您必须决定驱动程序和辅助进程的内存。您的驱动程序应该有2Gb的RAM。但笔记本电脑主要是为操场探索代码语法,不适合大型数据集。最好使用dataframe.sample((构建逻辑,然后将代码推送到更大的机器上生成输出。

相关内容

最新更新