Dataproc集群属性(核心、内存和内存开销)设置

问题描述 投票:1回答:1

我是一个新的dataproc和PySpark。我创建了一个集群,配置如下。

gcloud beta dataproc clusters create $CLUSTER_NAME  \
    --zone $ZONE \
    --region $REGION \
    --master-machine-type n1-standard-4 \
    --master-boot-disk-size 500 \
    --worker-machine-type n1-standard-4 \
    --worker-boot-disk-size 500 \
    --num-workers 3 \
    --bucket $GCS_BUCKET \
    --image-version 1.4-ubuntu18 \
    --optional-components=ANACONDA,JUPYTER \
    --subnet=default \
    --enable-component-gateway \
    --scopes 'https://www.googleapis.com/auth/cloud-platform' \
    --properties ${PROPERTIES} 

这里,是我目前使用的基于我在互联网上得到的属性设置。

PROPERTIES="\
spark:spark.executor.cores=2,\
spark:spark.executor.memory=8g,\
spark:spark.executor.memoryOverhead=2g,\
spark:spark.driver.memory=6g,\
spark:spark.driver.maxResultSize=6g,\
spark:spark.kryoserializer.buffer=128m,\
spark:spark.kryoserializer.buffer.max=1024m,\
spark:spark.serializer=org.apache.spark.serializer.KryoSerializer,\
spark:spark.default.parallelism=512,\
spark:spark.rdd.compress=true,\
spark:spark.network.timeout=10000000,\
spark:spark.executor.heartbeatInterval=10000000,\
spark:spark.rpc.message.maxSize=256,\
spark:spark.io.compression.codec=snappy,\
spark:spark.shuffle.service.enabled=true,\
spark:spark.sql.shuffle.partitions=256,\
spark:spark.sql.files.ignoreCorruptFiles=true,\
yarn:yarn.nodemanager.resource.cpu-vcores=8,\
yarn:yarn.scheduler.minimum-allocation-vcores=2,\
yarn:yarn.scheduler.maximum-allocation-vcores=4,\
yarn:yarn.nodemanager.vmem-check-enabled=false,\
capacity-scheduler:yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DominantResourceCalculator
  "

我想了解这是否是我的集群的正确属性设置,如果不是,我如何给这些属性分配最理想的值,特别是核心、内存和memoryOverhead,以最有效的方式运行我的pyspark作业,也因为我面临这个错误。Container exited with a non-zero exit code 143. Killed by external signal?

google-cloud-platform pyspark google-cloud-dataproc
1个回答
2
投票

这里重要的是要了解你所使用的机器的配置和限制,以及如何将内存分配给spark组件。

n1-standard-4是一台拥有15GB内存的4核机器。默认情况下,机器80%的内存分配给YARN节点管理器。由于你没有明确设置,在这种情况下,它将是12GB。

Spark Executor和Driver运行在YARN分配的容器中。

分配给spark执行器的总内存是spark.executor.memory和spark.executor.memoryOverhead的总和,在本例中是10GB。我建议你分配给executor的内存要比分配给memoryOverhead的多,因为前者用于运行任务,后者用于特殊用途。默认情况下,spark.executor.memoryOverhead是max(384MB, 0.10 * executor.memory)。

在这种情况下,每台机器只能有一个执行器(每个执行器10GB,机器容量15GB)。由于这种配置,你没有充分利用核心,因为你只为每个执行器使用了2个核心。建议每台机器留1个核心给其他操作系统进程,所以在这里将executor.cores改为3可能会有帮助。

一般来说,建议使用默认的内存配置,除非你对你要修改的所有属性有很好的理解。根据你的应用程序在默认设置下的性能,你可以调整其他属性。也可以考虑根据你的应用对内存的要求,改用不同的机器类型。

参考资料 - 1. https:/mapr.comlogresource-allocation-configuration-spark-yarn)。2. https:/sujithjay.comsparkwith-yarn。

© www.soinside.com 2019 - 2024. All rights reserved.