【问题标题】:Running Spark on AWS EMR, how to run driver on master node?在 AWS EMR 上运行 Spark,如何在主节点上运行驱动程序?
【发布时间】:2016-05-14 14:25:59
【问题描述】:

似乎默认情况下,EMR 将 Spark 驱动程序部署到其中一个 CORE 节点,导致 MASTER 节点几乎未使用。是否可以在 MASTER 节点上运行驱动程序?我已经尝试了 --deploy-mode 参数,但无济于事。

这是我的实例组 JSON 定义:

[
  {
    "InstanceGroupType": "MASTER",
    "InstanceCount": 1,
    "InstanceType": "m3.xlarge",
    "Name": "Spark Master"
  },
  {
    "InstanceGroupType": "CORE",
    "InstanceCount": 3,
    "InstanceType": "m3.xlarge",
    "Name": "Spark Executors"
  }
]

这是我的配置 JSON 定义:

[
  {
    "Classification": "spark",
    "Properties": {
      "maximizeResourceAllocation": "true"
    },
    "Configurations": []
  },
  {
    "Classification": "spark-env",
    "Properties": {
    },
    "Configurations": [
      {
        "Classification": "export",
        "Properties": {
        },
        "Configurations": [
        ]
      }
    ]
  }
]

这是我的步骤 JSON 定义:

[
  {
    "Name": "example",
    "Type": "SPARK",
    "Args": [
      "--class", "com.name.of.Class",
      "/home/hadoop/myjar-assembly-1.0.jar"
    ],
    "ActionOnFailure": "TERMINATE_CLUSTER"
  }
]

我正在使用 aws emr create-cluster--release-label emr-4.3.0

【问题讨论】:

  • 据我所知,答案是否定的。主节点的唯一责任似乎是运行 YARN。
  • 我虽然可以通过将 spark.executor.instances 设置为高于节点数来获得一个从属来运行 Spark 主控和一个执行器,但它没有工作
  • 这是 Spark on YARN 的本质。如果将部署模式设置为客户端,则驱动程序将在主模式下运行,并且只有小型应用程序主节点将在从节点上运行。此外,如果您放弃最大化资源分配并准确指定您想要的驱动程序、执行程序和应用程序主控(基本上将这一项压缩),您可以根据应用程序需求调整集群。甚至可以尝试动态资源分配docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/…
  • 相当浪费。

标签: amazon-web-services apache-spark emr


【解决方案1】:

设置驱动程序的位置

使用 spark-submit,标志 --deploy-mode 可用于选择驱动程序的位置。

当您正在调试并希望快速查看应用程序的输出时,以客户端模式提交应用程序是有利的。对于生产中的应用程序,最佳实践是以集群模式运行应用程序。此模式为您提供了在应用程序执行期间驱动程序始终可用的保证。但是,如果您确实使用客户端模式并且您从 EMR 集群外部(例如本地,在笔记本电脑上)提交应用程序,请记住驱动程序在 EMR 集群外部运行,并且驱动程序-执行程序通信的延迟会更高.

https://blogs.aws.amazon.com/bigdata/post/Tx578UTQUV7LRP/Submitting-User-Applications-with-spark-submit

【讨论】:

    【解决方案2】:

    我不认为这是一种浪费。在 EMR 上运行 Spark 时,主节点将运行 Yarn RM、Livy Server 以及您选择的其他应用程序。如果你在客户端模式下运行,大部分驱动程序也会在主节点上运行。

    请注意,驱动程序可能比执行程序上的任务更重,例如从所有执行程序收集所有结果,在这种情况下,如果主节点是驱动程序运行的地方,则需要为主节点分配足够的资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      相关资源
      最近更新 更多