Spark驱动程序内存计算

时间:2018-12-05 12:01:19

标签: apache-spark memory memory-management driver executor

我知道如何计算执行程序核心和内存。但是谁能解释在什么基础上计算spark.driver.memory?

2 个答案:

答案 0 :(得分:0)

Spark驱动程序内存是用于驱动程序进程的内存量,即运行应用程序main()函数并初始化SparkContext的进程,格式与具有大小后缀(“ k”,“ m”,“ g”或“ t”)(例如512m,2g)的JVM内存字符串相同。

JVM内存分为不同的部分。从广义上讲,JVM堆内存在物理上分为两个部分– 年轻一代老一代

年轻一代是创建所有新对象的地方。当年轻一代被填满时,执行垃圾收集。此垃圾收集称为次要GC。

上一代内存包含经过多次次要次要GC长期保存并存活的对象。通常,垃圾回收会在旧版内存已满时执行。旧世代垃圾回收称为专业垃圾回收,通常需要更长的时间。

Java垃圾收集是从内存中识别并删除未使用的对象的过程,并将空闲空间分配给将来处理中创建的对象。 Java编程语言的最佳功能之一是自动垃圾收集,这与其他编程语言(例如C)的内存分配和释放是手动过程不同。

垃圾收集器是在后台运行的程序,它可以查看内存中的所有对象,并找出程序中任何部分未引用的对象。所有这些未引用的对象都将被删除,并回收空间以分配给其他对象。

来源:

https://spark.apache.org/docs/latest/configuration.html

https://www.journaldev.com/2856/java-jvm-memory-model-memory-management-in-java#java-memory-model-8211-permanent-generation

答案 1 :(得分:0)

Dataset(例如collect take)上的操作需要将所有数据移至应用程序的驱动程序进程中,而在非常大的数据集上执行此操作可能会导致OutOfMemoryError使驱动程序进程崩溃。

向驱动程序收集大量数据时,您增加spark.driver.memory

按照

  

霍顿·卡劳(Holden Karau)和蕾切尔·沃伦(Rachel Warren)(O’Reilly)的《高性能火花》

     

Spark查询的大部分计算工作是由   执行程序,因此增加驱动程序的大小很少会加快执行速度   计算。但是,如果作业收集的数据过多,可能会失败   驱动程序或执行大型本地计算。因此,增加   驱动程序内存以及相应的值   spark.driver.maxResultSize可以防止以下情况的内存不足错误:   司机。

     

设置Spark驱动程序内存的一种很好的启发方法就是   不会导致内存错误的最低可能值   驱动程序,即为驱动程序提供最大可能的资源   执行者。