amazon-web-services - 为什么使用 EMR 上的自定义设置会减少 Spark 执行器的数量

标签 amazon-web-services apache-spark emr

我正在 EMR 4.3.0 上运行 Spark 1.6 集群模式,设置如下:

 [
  {
    "classification": "spark-defaults",
    "properties": {
      "spark.executor.cores" : "16"
    }
  },
  {
    "classification": "spark",
    "properties": {
      "maximizeResourceAllocation": "true"
    }
  }
]

具有以下实例:

master: 1 * m3.xlarge
core: 2 * m3.xlarge

当我测试执行者的数量时:

val numExecutors = sc.getExecutorStorageStatus.size - 1

我只得到2

spark 的 EMR 设置是否被覆盖?

最佳答案

好的,问题是:您正在设置每个执行器的核心数量,而不是执行器的数量。例如"spark.executor.cores" : "16" .

由于您使用的是 AWS EMR,这也意味着您正在使用 YARN .

默认情况下,执行程序实例的数量为 2(spark.executor.instances 是定义执行程序数量的属性)。

注意:

  • 此属性与 spark.dynamicAllocation.enabled 不兼容。如果两者spark.dynamicAllocation.enabledspark.executor.instances指定后,动态分配被关闭并且指定数量spark.executor.instances被使用。
  • 一般而言,较少的核心意味着更多的执行程序,但在这种情况下,您必须使用 yarn 管理核心数量,因为 YARN 将为您管理集群,并且默认情况下 YARN 每个执行程序使用 1 个核心。

因此你得到以下结果:

scala> val numExecutors = sc.getExecutorStorageStatus.size - 1
res1 : numberExectuors : Int = 2

这意味着您实际上使用两个执行器,每个从属一个执行器仅在 1 个核心上运行。

关于amazon-web-services - 为什么使用 EMR 上的自定义设置会减少 Spark 执行器的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36427611/

相关文章:

linux - 使用 PSQL 从 Redshift 导出数据时遇到问题

apache-spark - 如何计算训练模型的对数损失?

scala - 写入 Parquet 时出现 NullPointerException

hadoop - EMR 上的用例 HBase

amazon-web-services - 将AWS CloudFormation转换为Terraform模板

amazon-web-services - 如何安全地将日志发布到云端

node.js - 使用 NodeJS 和 AWS S3 将损坏/截断的 mp4 上传到 S3 存储桶

python - CountVectorizer,第二次使用相同的词汇

python - 如何从 AWSCLI 设置 EMR 的 YARN 内存开销

amazon-web-services - 如何从 AWS EMR 下载 Zeppelin Notebook