我们如何共享相同的火花上下文

时间:2018-10-06 06:21:30

标签: java apache-spark

我们正在尝试将Spark集成到我们的Web应用程序中。因此,我们要做的就是将火花引擎集成到我们的一项微服务中。 微服务会创建一个带有spark的永久连接,因此这将满足所有用户请求。但是问题是我们有3个实例 相同的微服务。因此,每个将创建与Spark的不同连接。我们如何才能避免这种情况。 我想要一个共享连接。当前的实现有可能吗?

            spark = SparkSession
                .builder()
                .appName("MyApp")
                .config("spark.cassandra.connection.host", cassandraHost)
                .config("spark.cassandra.connection.port", cassandraPort)
                .config("spark.scheduler.mode", schedularMode)
                .config("spark.executor.instances",executorInstance)
                .config("spark.executor.cores",executorCores)
                .config("spark.executor.memory",executorMemory)
                .master(master).getOrCreate();

请您提出一种更好的方法来处理这种情况。

1 个答案:

答案 0 :(得分:1)

我假设您使用的是独立群集。

对于分布式应用程序,您可以将微服务与某种形式的HA技术集成。

一种方法(我成功使用过的方法)是使这些微服务形成集群,以便由主动驱动程序的成员(某种意义上说是主驱动器)为所有火花作业请求提供服务。 Hazelcast,Ignite,JGroups是可以使用的一些群集工具。 这样做的另一个好处是,您可以在驱动程序死后重新启动。

也有一些系统允许通过http等协议重用spark上下文(想到的就是spark-job-server)。为此,Apache Ignite似乎也有一个火花组件。