Как мне указать конфигурацию Spark при работе на EMR? - PullRequest
1 голос
/ 02 июля 2019

Итак, я пытаюсь запустить конвейер Spark на EMR и создаю шаг, подобный следующему:

// Build the Spark job submission request
val runSparkJob = new StepConfig()
  .withName("Run Pipeline")
  .withActionOnFailure(ActionOnFailure.TERMINATE_CLUSTER)
  .withHadoopJarStep(
    new HadoopJarStepConfig()
      .withJar(jarS3Path)
      .withMainClass("com.example.SparkApp")
  )

Проблема в том, что когда я запускаю это, я сталкиваюсь с таким исключением:

org.apache.spark.SparkException: A master URL must be set in your configuration

Дело в том, что я пытаюсь выяснить, где указать главный URL, и я не могу его найти.Указывать ли это при настройке шага запуска конвейера или мне нужно каким-то образом вставить мастер IP:port в приложение и указать его в основной функции?

Ответы [ 2 ]

1 голос
/ 03 июля 2019

С помощью приложения Spark вы можете сделать ниже ... это опция 1

val sparkSessionBuilder = SparkSession
      .builder()
      .appName(getClass.getSimpleName)
      .master("yarn")

, если вы хотите добавить ее в stepconfig .... это опция 2

// Define Spark Application
        HadoopJarStepConfig sparkConfig = new HadoopJarStepConfig()
            .withJar("command-runner.jar")
            .withArgs("spark-submit,--deploy-mode,cluster,--master,yarn"),
                    "--class","com.amazonaws.samples.TestQuery",
                    "s3://20180205-kh-emr-01/jar/emrtest.jar", "10", "Step Test"); // optional list of arguments

StepConfig customStep = new StepConfig()
                 .withHadoopJarStep(sparkConfig)  
                 .withName("SparkSQL") ;

Я предпочитаю вариант 2, поскольку его нетрудно закодировать в коде.

1 голос
/ 03 июля 2019

Вы должны указать это в своем приложении при создании экземпляра SparkSession

Пример локального запуска (код Scala)

val sparkSessionBuilder = SparkSession
      .builder()
      .appName(getClass.getSimpleName)
      .master("local[*]")
      .config("spark.driver.host", "localhost")

И вы можете найти больше информации в jaceklaskowski.gitbooks.io или в spark.apache.org

Когда вы запускаете кластер, вы должны указать step с помощью command-runner.jar и перейти к args you jar

val runSparkJob = new StepConfig()
  .withName("Run Pipeline")
  .withActionOnFailure(ActionOnFailure.TERMINATE_CLUSTER)
  .withHadoopJarStep(
    new HadoopJarStepConfig()
      .withJar("command-runner.jar")
      .withArgs("spark-submit",
           "--deploy-mode", "cluster",
           "--driver-memory", "10G",
           "--class", <your_class_to_run>,
           "s3://path_to_your_jar")

Чтобы отправить работу в Spark с использованием SDK для Java

...