在AWS EMR上运行Spark,如何在主节点上运行驱动程序?

问题描述 投票:10回答:2

似乎默认情况下,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一起使用。

amazon-web-services apache-spark emr
2个回答
2
投票

设置驱动程序的位置

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

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

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


0
投票

我不认为这是浪费。在EMR上运行Spark时,主节点将运行Yarn RM,Livy Server以及您选择的其他应用程序。而且,如果以客户端模式运行,则大多数驱动程序也将在主节点上运行。

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

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