【问题标题】:Dataproc cluster property(core, memory and memoryOverhead) settingDataproc 集群属性(核心、内存和 memoryOverhead)设置
【发布时间】:2020-06-15 10:44:06
【问题描述】:

我是 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】:

    了解您使用的机器的配置和限制,以及内存是如何分配给 spark 组件的,这一点很重要。

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

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

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

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

    一般建议使用默认内存配置,除非您非常了解您正在修改的所有属性。根据默认设置下应用程序的性能,您可以调整其他属性。还可以考虑根据应用程序的内存要求更改为不同的机器类型。

    参考 - 1.https://mapr.com/blog/resource-allocation-configuration-spark-yarn/ 2.https://sujithjay.com/spark/with-yarn

    【讨论】:

    • 只是为了澄清@Tracy:您可能不需要设置任何属性来启动——即使是与内存无关的属性。您可以在处理更大规模的数据集并针对特定需求进行调整时微调属性。
    • 默认情况下,Dataproc 在客户端模式下运行 Spark 作业,这意味着 Spark 驱动程序在主节点上运行,而不是在 YARN 容器上运行。请参阅此相关问题stackoverflow.com/questions/49678757/…
    猜你喜欢
    • 1970-01-01
    • 2019-07-13
    • 2011-09-05
    • 2012-05-19
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    相关资源
    最近更新 更多