2016-11-15 134 views
-3

我有一个应用程序,其中多个用户可以指定Spark工作流程,然后发送到驱动程序并在集群上执行。Spark Streaming Multiple Streaming Jobs

现在应该扩展工作流程以支持流式数据源。一个可能的工作流程可能包括:

  1. 流的鸣叫与特定主题标签
  2. 变换每个鸣叫
  3. 窗口帧和可视化

这是工作在做分析,如果只有一个单一的流立即启动,但给出“”此JVM中只能启动一个StreamingContext。“错误。

我尝试了不同的已知方法,但没有一个为我工作(“spark.driver.allowMultipleContexts = true”,增加“spark.streaming.concurrentJobs”,尝试在不同池中运行每个流式上下文等。 )

任何人都可以告诉我关于使用Spark流并行流的最佳做法是什么? Thx提前!

回答

0

我假设你正在一个现有的应用程序中以编程方式启动你的火花流工作 - 因此JVM出错了。 Spark不是专门设计用于运行在不同应用程序的范围内,即使这在独立模式下也是可行的。如果您想在群集上编程启动火花流的工作,你将要使用的发射器,它看起来像这样:

import org.apache.spark.launcher.SparkLauncher 

object Launcher extends App { 

val spark = new SparkLauncher() 
.setSparkHome("...") 
.setAppResource("..path to your jar...") 
.setMainClass("..your app...") 
.setMaster("yarn") 
.launch(); 
spark.waitFor(); 

} 

有一个博客帖子有一些例子:

https://blog.knoldus.com/2015/06/26/startdeploy-apache-spark-application-programmatically-using-spark-launcher/

API文档在这里:

https://spark.apache.org/docs/2.0.1/api/java/org/apache/spark/launcher/SparkLauncher.html