Spark as a Service之JobServer项目和命名RDD

JobServer项目

要创建一个JobServer项目,需要下面的流程。
1. 在build.sbt中加入jobserver和spark core的package

2. 需要extends SparkJob,并重写validate和runJob方法。前者用于验证(如下面代码验证了input.string中需要有指定的内容),还可以验证HDFS或者其他配置信息。后者为job的执行代码(需要传入一个SparkContext,同样需要config,config中包含*.conf的信息),例如下面为wordCounter测试。

3. 打包,上传jar
完整的代码如下(code by crazyJVM)

然后将该项目打包,上传:

查看Web UI,该项目已经完成。
jobserver_completed_job

命名RDD

JobServer中另外一个概念是命名RDD,用于JobServer中job的RDD共享。使用这个特性,经过计算得到的RDD可以以一个名字来缓存以便后面使用。需要为SparkJob来混入(mix in)NamedRddSupport特质来使用这个功能。

然后完成job的定义,RDD可以以一个名称来保存:

其他在相同sc中运行的job可以通过这种方式获得该RDD:

(注意:需要显式指定类型来获得,这会使导致RDD的转换,否则会使用RDD[_]的类型。基于命名RDD的job的较好的做法是validate方法中检查该NamedRDD )

参考

JobServer Github
crazyJVM(陈超)的Spark课程

Posted in Java|Scala, Spark.
  1. 请教两点:1)文中说”需要extends JobServer”,但是代码里却是”extends SparkJob”,那么是SparkJob继承了JobServer吗?2)spark-jobserver 0.4兼容Spark 1.1.0吗?

    • hi, 这里写错了,感谢提醒。extends的是spark.jobserver.SparkJob。而且我这里使用的spark core是1.1.0版本的,所以使用1.1.0的sc是可行的。但就编译&部署这个jobserver而言,我在http://debugo.com/deploy-job-server/ 中使用1.1.0的spark core来编译遇到了一些问题,也没有深究。有解决方法请告诉我