Существует 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