作为独立运行和使用spark submit / spark launcher运行spark应用程序之间的区别是什么?

3
我正在探索不同的选项来打包Spark应用程序,我很困惑什么是最好的模式以及以下模式之间的区别?
  1. 将Spark应用程序的jar提交给spark-submit
  2. 从Spark Gradle项目构建fat jar并将其作为独立的Java应用程序运行。
我已经尝试了这两种方式,但我的要求是将Spark应用程序打包在Docker容器中,运行fat jar对我来说看起来很容易,但作为新手,我对采用fat jar方法可能面临的限制一无所知(撇开fat jar可能会增加大小)。
请问您的意见。
是否可以通过编程方式设置包括驱动程序和执行程序的Spark集群?
val conf = new SparkConf()
conf.setMaster("local")
conf.set("deploy-mode", "client")
conf.set("spark.executor.instances", "2")
conf.set("spark.driver.bindAddress", "127.0.0.1")
conf.setAppName("local-spark-kafka-consumer")
val sparkSession = SparkSession
  .builder()
  .master("local[*]")
  .config(conf)
  .appName("Spark SQL data sources example")
  .getOrCreate()

val sc = sparkSession.sparkContext

val ssc = new StreamingContext(sparkSession.sparkContext, Seconds(5))
val kafkaParams = Map[String, Object](
    "bootstrap.servers" -> "localhost:9092,localhost:9093",
    "key.deserializer" -> classOf[LongDeserializer],
    "value.deserializer" -> classOf[StringDeserializer],
    "group.id" -> "consumerGroup10",
    "auto.offset.reset" -> "earliest",
    "max.poll.records" -> "1",
    "enable.auto.commit" -> (false: java.lang.Boolean))

val topics = Array("topic1")
val stream = KafkaUtils.createDirectStream[String, String](...)
ssc.start()
ssc.awaitTermination()
} catch {
  case e: Exception => println(e)
}
1个回答

0
使用fat jars来部署Spark作业是一种古老甚至古老的做法。你可以这样做,相信我 :) 只要小心你在其中写入的内容就好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接