获取执行者的Spark会话

时间:2018-02-18 18:36:08

标签: apache-spark apache-spark-sql

在部署spark结构流应用程序后,如何在执行程序上获取一个spark会话,以便使用相同的会话和相同的配置设置部署另一个作业?

3 个答案:

答案 0 :(得分:1)

从技术上讲,您可以在执行程序上获得spark会话,无论您以哪种模式运行它都没关系,但确实不值得花时间.Spark会话是各种内部Spark设置以及我们在启动时提供的其他用户定义设置的对象

这些配置设置在执行程序中不可用的唯一原因是,大多数配置标记为 transient (临时),这意味着这些对象将被发送为null,因为将它们发送给它们是不合逻辑的执行程序,以同样的方式将数据库连接对象从一个节点发送到另一个节点是没有意义的。

一种麻烦的方法是从驱动程序的spark会话中获取所有配置设置,在标记为可序列化的自定义对象中进行设置,然后将其发送给执行程序。此外,就所有火花罐/目录和其他火花属性(例如 SPARK_HOME 等)而言,您的执行程序环境应与驱动程序相同,如果您每次跑步并意识到每次缺少某些东西,它们都会很忙。这将是一个不同的spark会话对象,但具有相同的设置。

更好的选择是使用与另一个Spark应用程序相同的设置来运行另一个Spark应用程序,因为一个Spark会话与一个Spark应用程序相关联。

答案 1 :(得分:0)

如果在集群模式下运行spark,则无法将spark会话发送到执行程序,因为无法序列化spark会话对象,因此无法将其发送给执行程序。此外,这样做违背了火花设计原则。

如果您能告诉我问题陈述,我或许可以帮助您。

答案 2 :(得分:0)

这是不可能的。我也有类似的要求然后我必须创建两个单独的主类和一个spark启动器类,因为我根据我想要运行的类来做sparksession.conf.set(主类名)。如果我想同时运行两个,那么我在启动另一个之前首先使用thread.sleep()来完成。我还使用了sparkListener代码来获取状态是否已经完成。