我知道如何计算执行器核心和memory.But,谁能解释spark.driver.memory是基于什么基础计算的?
发布于 2018-12-05 19:13:40
对Dataset的操作(如collect take )需要将所有数据移动到应用程序的驱动进程中,在非常大的dataset上这样做可能会使驱动进程与OutOfMemoryError崩溃。
当您将大量卷收集到驱动程序时,会增加spark.driver.memory。
按
高性能火花由Holden Karau和Rachel Warren (O‘’Reilly) 星火查询的大部分计算工作是由执行者执行的,因此增加驱动程序的大小很少会加快计算速度。但是,如果向驱动程序收集太多数据或执行大量本地计算,作业可能会失败。因此,增加驱动程序内存和相应的
spark.driver.maxResultSize值可以防止驱动程序中的内存不足错误。 设置火花驱动程序内存的一个很好的启发方法就是最低可能的值,它不会导致驱动程序中的内存错误,也就是说,它为执行者提供了最大的可能资源。
发布于 2018-12-05 15:00:05
火花驱动程序内存是用于驱动进程的内存量,即运行应用程序的main()函数的进程和初始化SparkContext的进程,其格式与具有大小单位后缀("k“、"m”、"g“或"t")的JVM内存字符串的格式相同(例如512 m、2g)。
JVM内存被划分为不同的部分。在广义上,JVM内存在物理上分为两部分:年轻一代和老一代。
年轻一代是创建所有新对象的地方。填充年轻一代时,将执行垃圾收集。这种垃圾收集被称为小GC。
老一代内存包含经过多次小GC后存活很长时间的对象。通常,当旧一代内存满时,垃圾回收就会执行。老一代垃圾收集被称为主要GC,通常需要更长的时间。
Java垃圾收集是标识并从内存中删除未使用对象的过程,以及分配给在未来处理中创建的对象的空闲空间的过程。java编程语言的最佳特性之一是自动垃圾收集,与其他编程语言(如C)不同,C语言中的内存分配和去分配是一个手动过程。
垃圾收集器是在后台运行的程序,它查看内存中的所有对象,找出程序的任何部分没有引用的对象。所有这些未引用的对象都将被删除,空间将被重新分配给其他对象。
来源:
https://stackoverflow.com/questions/53631853
复制相似问题