纱线群集配置: 8个节点 每个节点8个核心 每个节点8 GB RAM 每个节点1TB硬盘
nancy8888521 回答:如何计算执行器内存,执行器数量,执行器核心数量和驱动程序内存,以使用Spark读取40GB的文件?
执行人记忆&执行人人数
执行器内存和执行器/节点之间没有相互链接,因此您首先要选择执行器内存或执行器数量,然后根据您的选择,可以按照此设置属性以获得所需的结果
在YARN中,这些属性会影响可基于spark.executor.cores,spark.executor.memory
属性值(以及执行器内存开销)在NodeManager中实例化的容器(Spark中的执行器)数量
例如,如果一个群集具有10个节点(RAM:16 GB,核心:6)并设置了以下纱线属性
yarn.scheduler.maximum-allocation-mb=10GB
yarn.nodemanager.resource.memory-mb=10GB
yarn.scheduler.maximum-allocation-vcores=4
yarn.nodemanager.resource.cpu-vcores=4
然后具有spark属性的spark.executor.cores = 2,spark.executor.memory = 4GB,您可以预期有2个执行器/节点,因此总共将为驱动程序提供19个执行器+ 1个容器
如果spark属性为spark.executor.cores=3,spark.executor.memory=8GB
,则您将获得9个执行程序(仅1个执行程序/节点)+1个驱动程序link的容器
驱动器内存
spark.driver.memory
—每个Spark驱动程序的Java堆内存的最大大小
spark.yarn.driver.memoryOverhead
-每个驱动程序可以从YARN请求的额外堆外内存量。这与spark.driver.memory一起,是YARN可以用来为驱动程序进程创建JVM的总内存。
闪烁驱动程序内存不会直接影响性能,但可以确保,Spark 作业在驱动程序上不受内存限制。假设yarn.nodemanager.resource.memory-mb
的值为X,使用以下公式调整分配给Spark驱动程序的内存总量:
- 当X大于50 GB时为12 GB
- X在12 GB到50 GB之间时为4 GB
- X在1GB和12GB之间时为1GB
- X小于1 GB时为256 MB
这些数字是spark.driver.memory
和spark.yarn.driver.memoryOverhead
的总和。开销应为总数的10-15%。