独立运行spark应用程序与spark提交/spark启动器之间的区别?

Posted

技术标签:

【中文标题】独立运行spark应用程序与spark提交/spark启动器之间的区别?【英文标题】:Difference between running spark application as standalone vs spark submit / spark launcher? 【发布时间】:2019-07-11 16:45:46 【问题描述】:

我正在探索打包 spark 应用程序的不同选项,我很困惑什么是最佳模式以及以下模式之间的区别是什么?

    将 spark 应用程序的 jar 提交到 spark-submit 从 spark gradle 项目构建一个 fat jar 并将 jar 作为独立的 java 应用程序运行。

这两种方法我都试过了,但我的要求是将 spark 应用程序打包在 docker 容器中,运行 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】:

使用 fat jar 部署 spark 作业是一种古老甚至古老的做法。你可以做到这一点,相信我 :) 小心你在里面写的东西。

【讨论】:

以上是关于独立运行spark应用程序与spark提交/spark启动器之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

Spark内核概述

如何从 IntelliJ IDEA 向远程 Spark 集群提交代码

Apache Spark s3a 提交者 - 线程堆栈 - 内存不足问题

spark配置-独立应用程序

Spark 独立模式多个 shell 会话(应用程序)

Spark 独立数量执行器/核心控制