如何触发火花作业而不使用" spark-submit"?实时而非批量

时间:2015-06-16 00:58:16

标签: scala apache-spark spark-streaming

我有一个spark作业,我通常使用spark-submit运行,输入文件名作为参数。现在我想让团队工作,所以人们可以提交一个输入文件(可能通过一些web-API),然后触发spark工作,它将返回用户结果文件(可能还通过web- API)。 (我使用的是Java / Scala)

在这种情况下,我需要构建什么才能触发火花作业?在某处有一些教程吗?我应该使用火花流吗?谢谢!

3 个答案:

答案 0 :(得分:1)

一种方法是让Web服务器监听作业,并且每个Web请求都可能触发{{1}}的执行。

您可以使用Java的ProcessBuilder执行此操作。

据我所知,除了通过{{1}}之外,没有其他方法可以调用火花作业。

答案 1 :(得分:1)

你可以使用Livy。 Livy是一个开源的REST接口,可以在任何地方使用Spark。

Livy是一个新的开源Spark REST服务器,用于从任何地方提交和交互您的Spark作业。 Livy在概念上基于非常受欢迎的IPython / Jupyter,但实现了更好地与多用户集成到Hadoop生态系统。 Spark现在可以通过简单的方式作为服务提供给任何人:Python或Scala中的Spark shell可以由Livy在集群中运行,而最终用户可以通过REST API自行操作它们。也可以提交常规的非交互式应用程序。作业的输出可以以表格格式进行内省和返回,这使得它可以在图表中显示。 Livy可以指向一个独特的Spark集群,并由用户创建多个上下文。使用YARN模拟,将使用提交它们的用户的实际权限执行作业。

请查看此网址以获取信息。 https://github.com/cloudera/livy

答案 2 :(得分:0)

您可以使用SparkLauncher类来执行此操作。您将需要有一个REST API,它将从用户那里获取文件,然后使用SparkLauncher触发火花作业。

Process spark = new SparkLauncher()
      .setAppResource(job.getJarPath())
      .setMainClass(job.getMainClass())
      .setMaster("master spark://"+this.serverHost + ":" + this.port)
      .launch();