Выполнение нескольких scala объектов с использованием одной Spark-submit - PullRequest
0 голосов
/ 28 марта 2020

Привет, я создал один проект Maven (spark / scala) с использованием Eclipse и имею 4 scala Объект в этом проекте (1st_layer. scala, 2nd_layer. scala, 3rd_layer. scala, 4th_layer. scala). Я создал свой проект jar (/home/test/Demo2-0.0.1-SNAPSHOT.jar). Теперь я хочу запустить все эти слои с помощью команды spark submit.

    spark-submit --master local[*]  --class com.pkg.data.1st_layer  /home/test /Demo2-0.0.1-SNAPSHOT.jar

Не могли бы вы Пожалуйста, дайте мне подсказку, как я могу пройти все классы (1st_layer, 2nd_layer, 3rd_layer, 4th_layer), используя одну искру отправки. Примечание (все слои являются зависимыми (dataload, transform..et c).

Пример кода слоя:

object Layer1 {
  def main(args: Array[String]) {
    //created spark session
    var a1 = sparksession.sql(" loadstmt")
    sparksession.stop()
  }
}

object Layer2 {
  def main(args: Array[String]) {
    //created spark session
    var a1 = sparksession.sql(" insert and select(temp) st")
    sparksession.stop()
  }
}

object Layer3 {
  def main(args: Array[String]) {
    //created sparksession
    var a1 = sparksession.sql(" insert and select(orc)")
    sparksession.stop()
  }
}

1 Ответ

1 голос
/ 29 марта 2020

Существует 2 варианта

1) Выполнение спарк-отправки с одним драйвером.

2) Выполнение нескольких спарк-отправки, то есть по одному для каждого. ...

Как вы хотите сделать с помощью одной искровой отправки и драйвера, вы можете сделать это.

Вы можете использовать один драйвер, передавая аргументы драйверу, вы можете обойти поток и вы можете выполнить шаги (например, преобразование нагрузки) изолированно (отдельно), а также на этапе вы можете выполнить шаги ETL в алгоритме.

Это пример кода (вместо нескольких классов / объектов I использовал одну функцию для каждого шага, хотя вы можете использовать разные объекты для инкапсуляции вашей логики c и необязательно):

package examples

import org.apache.log4j.Level
import org.apache.spark.sql.SparkSession

object ETLDriver {
  val spark = SparkSession.builder().appName("ETLDriver").master("local").getOrCreate()
  val logger = org.apache.log4j.Logger.getLogger("org")
  logger.setLevel(Level.WARN)

  import spark.implicits._

  def layer1() = {
    //created spark session
    var a1 = spark.sql(" loadstmt")
  }

  def layer2() {
    //created spark session
    var a1 = spark.sql(" insert and select(temp) st")
  }

  def layer3() {
    //created sparksession
    var a1 = spark.sql(" insert and select(orc)")
  }

  def main(args: Array[String]): Unit = {
// you can pass arguments through your spark submit to by pass the flow  here I have
    // not included since its a sudo code.
    layer1()
    layer2()
    layer3()
  }
}

пример Отправка Spark будет выглядеть ниже

    spark-submit --master local[*]  --class examples.ETLDriver  /home/test /Demo2-0.0.1-SNAPSHOT.jar

Если ваши шаги ETL зависят, то вы можете использовать один искровой драйвер для этого.

Вывод:

Выполняя отдельный spark-submit, т. Е. Вариант 2, вы снова получаете свечу и снова за все 3 шага, которые вы упомянули. займет некоторое время, чтобы овладеть сессией и извинить работу. Поэтому я бы явно предпочел вариант 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...