我对在Spark中处理执行程序内存和驱动程序内存感到困惑。
我的环境设置如下:
输入数据信息:
为了进行简单的开发,我使用了以独立集群模式(8个工作程序,20个内核,45.3 G内存)执行了Python代码spark-submit
。现在,我想设置执行程序内存或驱动程序内存以进行性能调整。
从Spark文档中,执行程序内存的定义为
每个执行程序进程要使用的内存量,格式与JVM内存字符串相同(例如512m,2g)。
驱动程序内存如何?
您需要分配给驱动程序的内存取决于作业。
如果作业仅基于转换,并终止于某些分布式输出操作,例如rdd.saveAsTextFile,rdd.saveToCassandra等,则驱动程序的内存需求将非常低。几乎没有100 MB的存储空间。该驱动程序还负责传递文件和收集度量标准,但不参与数据处理。
如果作业需要驱动程序参与计算,例如某些ML算法需要具体化结果并在下一次迭代中广播结果,则您的作业将取决于通过驱动程序的数据量。操作,如.collect
,.take
和takeSample
传送数据至驱动器并因此,驾驶员需要足够的内存来分配这样的数据。
例如,如果rdd
群集中有一个val myresultArray = rdd.collect
3GB的内存,并调用,那么驱动程序中将需要3GB的内存来保存该数据,并为第一段中提到的功能提供一些额外的空间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句