Apache spark 如果块大小为128 MB,则需要较大的执行器内存

Apache spark 如果块大小为128 MB,则需要较大的执行器内存,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我有一个关于spark的问题。我使用的是spark 2.2,据我所知,每个执行者都会启动并执行任务。每个任务对应一个分区。默认分区数基于默认并行度和文件大小/默认块大小。因此,考虑到1 GB的文件大小和由4个执行器组成的集群,每个执行器可以启动2个任务(2个核心)。根据计算,执行器内存应约为256 MB(每个任务在128 MB块上运行2个任务)+384 MB开销。但是,如果我将这个大小的代码作为执行器内存运行,那么性能会很慢。如果我给执行器1.5GB的内存(考虑到rdd上的一些计算),性能仍然很

我有一个关于spark的问题。我使用的是spark 2.2,据我所知,每个执行者都会启动并执行任务。每个任务对应一个分区。默认分区数基于默认并行度和文件大小/默认块大小。因此,考虑到1 GB的文件大小和由4个执行器组成的集群,每个执行器可以启动2个任务(2个核心)。根据计算,执行器内存应约为256 MB(每个任务在128 MB块上运行2个任务)+384 MB开销。但是,如果我将这个大小的代码作为执行器内存运行,那么性能会很慢。如果我给执行器1.5GB的内存(考虑到rdd上的一些计算),性能仍然很慢。只有当我将executor内存增加到3GB时,性能才是好的

有人能解释一下吗 1.当我们一次只处理128 MB的数据时,为什么需要这么多执行器内存。 2.我们如何计算作业所需的最佳执行器内存


感谢您的帮助

内存处理需要的不仅仅是读取文件。例如,由于加入而进行的洗牌,groupByKey。同意,但这不应超过块大小的两倍,如果块大小为128MB,则排序等其他操作将需要200 MB。即使这样,执行也很慢。磁盘和内存中的记录大小可能会有相当大的差异。使用SizeEstimator或缓存输入rdd以在内存中查找rdd的大小。这将是输入rdd的大小。在RDD上应用转换时,您还必须考虑执行者创建的许多临时对象。无论转换处理128MB的数据,我们都不需要1GB。也就是说,我们只是从一个文件中读取,然后读取到另一个文件,而没有进行任何转换。根据我所看到的,我们仍然需要大量的执行器内存来处理128MB的块