设为首页 加入收藏

TOP

Spark Streaming并发提交job
2019-02-17 13:25:41 】 浏览:89
Tags:Spark Streaming 并发 提交 job
Spark job

我们都知道,spark的执行是lazy的,也就是spark的函数分为两类: Transform和action. 只有在使用action函数时,才会触发一个spark job.

串行的Spark job

在一个Spark Streaming的程序中,一个比较常见的case是,外部有一个n次循环,循环的内容里有个action函数,这样相当于说一共会有n个Spark job。基于Spark的调度策略,只有当上一个job执行完成后,下一个job才会执行,这样相当于n个作业顺序执行。scala代码如下:

// events是一个长度为n的数组,对每个元素进行了buildEvent操作,其中buildEvent函数中有个action操作。
events.map(event => event.buildEvent())

如果这n个job之间没有依赖关系的话,串行的执行会使资源利用率较低。因此,很自然就会想到能否并发的提交执行各个job。

并行提交Spark job

并行提交的思路很简单,使用threadpool, 将循环内的每个action放到不同的线程中,这样由各线程处理action逻辑。上述串行的代码逻辑就相应的改为如下:

val threadPool: ExecutorService = Executors.newCachedThreadPool
val eventService = new ExecutorCompletionService[String](threadPool)
events.map(event => eventService.submit(new buildEvent()))
//等待每个作业返回结果
for (index <- 0 until events.size) {
      val result = eventService.take.get()
     }
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇spark 学习4-tang 下一篇MAC Spark安装和环境变量设置

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目