EMR command-runner 如何提交作业

How EMR command-runner submit jobs

我如何弄清楚在将 EMR Step 部署到主节点等于 local[x] 的集群后到底发生了什么?

如何command-runner.jar提交作业给EMR的master?如果我将“--executor-cores 4”作为 spark-submit 参数传递,但在 Launcher 中我创建会话 local[8] 我将为执行程序获得多少内核?它将创建多少个执行者?

我未能在 AWS 文档中找到这一点。示例:

SomeStep: 
  Type: AWS::EMR::Step
  Properties: 
    ActionOnFailure: CONTINUE
    HadoopJarStep: 
      Args: 
        - "spark-submit"
        - "--deploy-mode"
        - "cluster"
        - "--executor-cores"
        - "4"
        - "--class"
        - "com.psyquation.batch.analytic.Driver"

        {
          "Fn::Sub": "s3://some-bucker/my-app.jar"
        },
      Jar: command-runner.jar
      MainClass: com.somepackage.Launcher
    Name: SomeStep
    JobFlowId: !Ref SomeCluster

现在里面 com.somepackage.Launcher:

SparkSession.Builder builder = SparkSession.builder()
    // some configs ...
    .master("local[8]")
    .getOrCreate();

如果你将 master 设置为“local”,它根本不会创建任何 executor。整个应用程序(驱动程序和任务)将 运行 在主实例上的单个 JVM 进程中。使用“local[8]”使得这个单个进程可以 运行 8 个并行任务(在不同的线程中)。

“local”的masterurl主要用于(local)development/testing,不用于集群上的运行ning。您很可能根本不应该设置 master url,这样它将使用“yarn”,这是 EMR 的默认值。