如何计算执行器内存,执行器数量,执行器核心数量和驱动程序内存,以使用Spark读取40GB的文件?

纱线群集配置: 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.memoryspark.yarn.driver.memoryOverhead的总和。开销应为总数的10-15%。

您还可以遵循此Cloudera link for tuning Spark jobs

本文链接:https://www.f2er.com/3145800.html

大家都在问