wls*_*ica 44 memory-management apache-spark
我对在Spark中处理执行程序内存和驱动程序内存感到困惑.
我的环境设置如下:
输入数据信息:
为了简单的开发,我用独立的集群模式(8个工作线程,20个核心,45.3 G内存)执行我的Python代码spark-submit.现在我想设置执行程序内存或驱动程序内存以进行性能调整.
从Spark文档中,执行程序内存的定义是
每个执行程序进程使用的内存量,格式与JVM内存字符串相同(例如512m,2g).
司机记忆怎么样?
maa*_*asg 97
您需要分配给驱动程序的内存取决于作业.
如果作业完全基于转换并终止于某些分布式输出操作,如rdd.saveAsTextFile,rdd.saveToCassandra,......那么驱动程序的内存需求将非常低.几百MB的MB会做.驱动程序还负责提供文件和收集指标,但不参与数据处理.
如果作业需要驱动程序参与计算,例如某些ML算法需要实现结果并在下一次迭代中广播它们,那么您的工作将取决于通过驱动程序的数据量.操作,如.collect,.take和takeSample传送数据至驱动器并因此,驾驶员需要足够的内存来分配这样的数据.
例如,如果rdd群集中有3GB并且呼叫val myresultArray = rdd.collect,则驱动程序中需要3GB内存来保存该数据,并为第一段中提到的功能增加一些空间.
在Spark应用程序中,Driver负责任务调度,Executor负责执行作业中的具体任务.
如果您熟悉MapReduce,那么您的map任务和reduce任务都在Executor中执行(在Spark中,它们被称为ShuffleMapTasks和ResultTasks),而且,无论您想要缓存的RDD也在执行程序的JVM的堆和磁盘中.
所以我认为你的驱动程序可以使用几GB.
| 归档时间: |
|
| 查看次数: |
37188 次 |
| 最近记录: |