使用REST触发spark工作

时间:2015-03-11 16:59:49

标签: rest apache-spark spring-batch job-scheduling spring-data-hadoop

我一直在尝试apache spark。我的问题更具体地触发火花工作。 Here我发布了关于理解火花工作的问题。在弄脏工作之后,我转向了我的要求。

我有一个REST端点,我公开API来触发Jobs,我使用Spring4.0进行Rest实现。现在继续我想在Spring中实现Job as Service,我将以编程方式提交Job,这意味着当触发端点时,使用给定的参数我将触发该作业。 我现在有很少的设计选择。

  • 与下面的写作相似,我需要维护一个抽象类调用的几个Jobs可能是JobScheduler

     /*Can this Code be abstracted from the application and written as 
      as a seperate job. Because my understanding is that the 
     Application code itself has to have the addJars embedded 
     which internally  sparkContext takes care.*/
    
     SparkConf sparkConf = new SparkConf().setAppName("MyApp").setJars(
     new String[] { "/path/to/jar/submit/cluster" })
     .setMaster("/url/of/master/node");
      sparkConf.setSparkHome("/path/to/spark/");
    
            sparkConf.set("spark.scheduler.mode", "FAIR");
            JavaSparkContext sc = new JavaSparkContext(sparkConf);
            sc.setLocalProperty("spark.scheduler.pool", "test");
    
        // Application with Algorithm , transformations
    
  • 扩展到上面有服务处理的多个版本的作业。

  • 或者使用Spark Job Server来执行此操作。

首先,我想知道在这种情况下最佳解决方案是什么,执行明智,还有扩展。

注意:我正在使用来自spark的独立群集。 请帮助。

5 个答案:

答案 0 :(得分:26)

事实证明,Spark有一个隐藏的REST API来提交作业,检查状态和杀死。

点击此处查看完整示例:http://arturmkrtchyan.com/apache-spark-hidden-rest-api

答案 1 :(得分:6)

只需使用Spark JobServer即可 https://github.com/spark-jobserver/spark-jobserver

制作服务需要考虑很多事情,Spark JobServer已经覆盖了大部分内容。如果您发现不够好的东西,应该很容易提出请求并将代码添加到他们的系统而不是从头开始重新创建

答案 2 :(得分:5)

Livy是一个开源REST接口,用于从任何地方与Apache Spark进行交互。它支持在本地或Apache Hadoop YARN中运行的Spark上下文中执行代码或程序的片段。

答案 3 :(得分:1)

这是一个很有帮助的好客户:https://github.com/ywilkof/spark-jobs-rest-client

编辑:这个答案是在2015年给出的。现在有像Livy这样的选项。

答案 4 :(得分:0)

就算是我有这个要求,我也可以使用Livy Server来实现,正如撰稿人Josemy提到的那样。以下是我采取的步骤,希望对您有所帮助:

Download livy zip from https://livy.apache.org/download/
Follow instructions:  https://livy.apache.org/get-started/


Upload the zip to a client.
Unzip the file
Check for the following two parameters if doesn't exists, create with right path
export SPARK_HOME=/opt/spark
export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop

Enable 8998 port on the client

Update $LIVY_HOME/conf/livy.conf with master details any other stuff needed
Note: Template are there in $LIVY_HOME/conf
Eg. livy.file.local-dir-whitelist = /home/folder-where-the-jar-will-be-kept/


Run the server
$LIVY_HOME/bin/livy-server start

Stop the server
$LIVY_HOME/bin/livy-server stop

UI: <client-ip>:8998/ui/

Submitting job:POST : http://<your client ip goes here>:8998/batches
{
  "className" :  "<ur class name will come here with package name>",
  "file"  : "your jar location",
  "args" : ["arg1", "arg2", "arg3" ]

}