Skip to content

一个基于Spring Boot的Spark开发手脚架(Java+Scala),开箱即用!模拟了1个WordCount和TopN的例子。

License

Notifications You must be signed in to change notification settings

Paleozoic/spark_spring_boot_demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

spark_spring_boot_demo

一个基于Spring Boot的Spark开发手脚架,开箱即用!

Main函数

spark-submit命令指定Main函数位于com.maxplus1.spark.demo.scala.main

Task任务

Task任务位于此包下, 所有Task需要实现com.maxplus1.spark.demo.scala.task.Task

TaskController任务控制

TaskController是object单例,用于顺序调度Task任务。避免使用Shell去控制Spark作业。个人的观点是尽量避免使用bash脚本。

TASK_MAPPING

TASK_MAPPING映射了任务名以及任务的类型classOf

Main函数入参

入参以JSON的形式传入,传入后会被反序列化为:TaskInput, TaskInput由taskName:Stringargs:java.util.Map[String,String]组成。 一个参数的例子如下:

{
    "taskName": "testTask1",
    "args": {
        "time": "2017-03-21"
    }
}

根据参数的taskName可以从TASK_MAPPING取到相应的Task, 并根据传入的参数taskName顺序获得有序数组tasks: Array[Task], 将tasks: Array[Task]传入TaskController可以顺序执行Task。

持久层

持久层使用Java版本的MyBatis, 一般来说数据库操作用于读取相关配置参数或者写入程序状态。

Package打包

请留意pom.xml

为什么Java和Scala混编?

  • Scala语法糖实在太多……这个既是好处也是坏处
  • Java更适合于面向对象编程,而Scala函数编程的特性,更适合用于计算,符合数学思维的特性。所以使用Java写面向对象的代码,使用Scala写Spark相关计算代码。
  • PS:以上属于个人理解,且听且思。

About

一个基于Spring Boot的Spark开发手脚架(Java+Scala),开箱即用!模拟了1个WordCount和TopN的例子。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published