我有一个应用程序,其中多个用户能够指定Spark工作流,然后将其发送到驱动程序并在集群上执行。
工作流现在应该扩展为也支持流数据源。一个可能的工作流程包括:
- 流推文与特定的标签
- 变换每条tweet
- 对窗口框架进行分析和可视化
如果一次只启动一个流,但是给出在这个JVM中只能启动一个StreamingContext。"错误。
我尝试了不同的已知方法,但没有一个对我有效("spark.driver. net")。allowmultiecontexts = true",增加"spark.streaming. "concurrentJobs",试图在不同的池中运行每个流上下文,等等)
谁能告诉我关于并行流与Spark流的当前最佳实践是什么?提前感谢!
我假设您是在现有应用程序中以编程方式启动spark流作业-因此JVM出现了错误。Spark特别没有设计成在不同的应用程序范围内运行,即使这在独立模式下也是可行的。如果您想在集群上以编程方式启动spark流作业,您将需要使用Launcher,它看起来像这样:
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