我知道如何计算执行程序核心和内存。但是谁能解释在什么基础上计算spark.driver.memory?
答案 0 :(得分:0)
Spark驱动程序内存是用于驱动程序进程的内存量,即运行应用程序main()函数并初始化SparkContext的进程,格式与具有大小后缀(“ k”,“ m”,“ g”或“ t”)(例如512m,2g)的JVM内存字符串相同。
JVM内存分为不同的部分。从广义上讲,JVM堆内存在物理上分为两个部分– 年轻一代和老一代。
年轻一代是创建所有新对象的地方。当年轻一代被填满时,执行垃圾收集。此垃圾收集称为次要GC。
上一代内存包含经过多次次要次要GC长期保存并存活的对象。通常,垃圾回收会在旧版内存已满时执行。旧世代垃圾回收称为专业垃圾回收,通常需要更长的时间。
Java垃圾收集是从内存中识别并删除未使用的对象的过程,并将空闲空间分配给将来处理中创建的对象。 Java编程语言的最佳功能之一是自动垃圾收集,这与其他编程语言(例如C)的内存分配和释放是手动过程不同。
垃圾收集器是在后台运行的程序,它可以查看内存中的所有对象,并找出程序中任何部分未引用的对象。所有这些未引用的对象都将被删除,并回收空间以分配给其他对象。
来源:
答案 1 :(得分:0)
Dataset
(例如collect
take
)上的操作需要将所有数据移至应用程序的驱动程序进程中,而在非常大的数据集上执行此操作可能会导致OutOfMemoryError使驱动程序进程崩溃。
向驱动程序收集大量数据时,您增加spark.driver.memory
。
按照
霍顿·卡劳(Holden Karau)和蕾切尔·沃伦(Rachel Warren)(O’Reilly)的《高性能火花》
Spark查询的大部分计算工作是由 执行程序,因此增加驱动程序的大小很少会加快执行速度 计算。但是,如果作业收集的数据过多,可能会失败 驱动程序或执行大型本地计算。因此,增加 驱动程序内存以及相应的值
spark.driver.maxResultSize
可以防止以下情况的内存不足错误: 司机。设置Spark驱动程序内存的一种很好的启发方法就是 不会导致内存错误的最低可能值 驱动程序,即为驱动程序提供最大可能的资源 执行者。