如何在Web应用程序的用户界面中交互式提交spark任务?

时间:2018-03-08 10:21:08

标签: scala apache-spark

背景

  1. 我们的项目是基于PlayFrameWork构建的。
  2. 前端语言:JavaScript
  3. 后端语言:Scala
  4. 我们正在开发一个Web应用程序,服务器是一个集群。
  5. 想要实现:

    1. 在Web UI中,User首先输入一些有关查询的参数,然后单击“提交”等按钮。然后将这些参数发送到后端。 (这很容易,很明显)
    2. 当后端获取参数时,后端开始读取并处理存储在HDFS中的数据。数据处理包括数据清理,过滤和其他操作,如聚类算法,而不仅仅是spark-sql查询。所有这些操作都需要在spark cluster
    3. 上运行
    4. 我们不需要手动打包胖罐并将其提交到集群并将结果发送到前端 (这些是困扰我的!)
    5. 我们做了什么:

      • 我们在IDEA单独建立一个火花项目。当我们获取参数时,我们手动将这些参数分配给spark-project中的变量。
      • 然后“Build Artifacts” - >“Bulid”来获得一个胖罐。
      • 然后通过两种方式提交:

        1. “spark-submit --class main.scala.Test --master yarn /path.jar”

        2. 在本地模式下直接在IDEA中运行scala代码(如果更改为Yarn,将抛出异常)。

      • 程序执行完成后,我们会获得processed_data并存储它。

      • 然后阅读processed_data的路径并将其传递给前端。

      所有用户都不是以交互方式提交的。非常愚蠢!

      因此,如果我是用户,我想在群集上查询或处理数据,并方便地在前端获得反馈 我该怎么办? 哪些工具或库可以使用?

      谢谢!

2 个答案:

答案 0 :(得分:0)

所以通常你有两种方法:

  • 创建也将是Web服务的Spark应用程序
  • 创建将由Web服务调用的Spark应用程序

第一种方法 - spark app是一种Web服务,这不是一种好方法,因为只要您的Web服务正在运行,您也将使用群集上的资源(除非您运行spark在具有特定配置的mesos上) - 阅读有关集群管理器here的更多信息。

第二种方法 - 服务和火花应用程序分离更好。在此方法中,您可以从Web服务创建一个或多个Spark应用程序launched by calling spark submit。还有两个选项 - 创建单个spark应用程序,将使用参数调用,指定要执行的操作,或为一个查询创建一个spark应用程序。此方法中的查询结果可以保存到文件中,也可以通过网络或任何其他inter process communication方法发送到Web服务器。

答案 1 :(得分:0)

以下是提交点火作业的多种方法:

  1. 在终端上使用spark-submit命令。
  2. 使用spark内置的rest API。 you can click to find out how to use it.
  3. 在程序中自己提供一个rest API,并将api设置为Main-Class,以便在spark集群主服务器上运行jar。通过这样做,您的api应该将输入作业提交请求分派给您想要的特定操作。在您的api中,您应该实例化实例化SparkContext的类。此操作相当于spark-submit操作。这意味着当rest api收到作业提交请求并按照上面的说明执行操作时,您可以在主Web上查看作业进度ui然后您的作业终止您的api已启动并等待您的下一个请求。
  4. **第三种解决方案是我自己在网络爬虫中运行不同类型算法的经验。 **