文档章节

Azkaban的定时调度任务分析33:定时执行上文

强子哥哥
 强子哥哥
发布于 2016/04/12 14:04
字数 468
阅读 210
收藏 0
点赞 1
评论 0

之前,我们研究了执行1次的任务,但是实际生产环境中,我们可能需要很多个定时调度的需求,

所以,接下来,我们来研究定时调度的原理!

========================================================================

点开这个按钮后,出现新的界面如下:

填写自己的数值后,提交Schedule按钮后,观察URL

对应的URL===>

.POST /schedule HTTP/1.1

看来需要去查阅一个新的URL Servlet

root.addServlet(new ServletHolder(new ScheduleServlet()), "/schedule");

========================================================================================

jdb azkaban.webapp.AzkabanWebServer -conf  /root/azkb/azkaban_3.0.0_debug/conf

stop in azkaban.webapp.servlet.ScheduleServlet.doPost

stop in  azkaban.webapp.servlet.ScheduleServlet.ajaxScheduleFlow

stop in azkaban.scheduler.ScheduleManager.scheduleFlow

run

========================================================================================

最后执行的是ExecutorServlet的下面的方法

 @Override

  protected void handlePost(HttpServletRequest req, HttpServletResponse resp,

      Session session) throws ServletException, IOException {

  //看到这里了

    if (hasParam(req, "ajax")) {

      handleAJAXAction(req, resp, session);

    }

  }

经过一番参数解析后,后面会有这样的一段代码

Schedule schedule = scheduleManager.scheduleFlow(-1, projectId, projectName, flowName, "ready",

firstSchedTime.getMillis(), firstSchedTime.getZone(), thePeriod, DateTime.now().getMillis(),

firstSchedTime.getMillis(), firstSchedTime.getMillis(), user.getUserId(), flowOptions, slaOptions);

logger.info("User '" + user.getUserId() + "' has scheduled " + "[" + projectName + flowName + " (" + projectId

+ ")" + "].");

这个倒是需要仔细研究下~

========================================================================================

正如单次运行是放入一个queue中一样,对于循环执行的任务,放入一个线程的队列里

public class TriggerManager extends EventHandler implements

里面有一个线程

  private final TriggerScannerThread runnerThread;

任务是如何插入到这个线程的呢?

 

 

 

原因就在于,之前有个函数

public void insertTrigger(Trigger t) throws TriggerManagerException {

    synchronized (syncObj) {

      try {

        triggerLoader.addTrigger(t);

      } catch (TriggerLoaderException e) {

        throw new TriggerManagerException(e);

      }

      runnerThread.addTrigger(t);//看这里

      triggerIdMap.put(t.getTriggerId(), t);

    }

  }

public void addTrigger(Trigger t) {

      synchronized (syncObj) {

        t.updateNextCheckTime();

        triggers.add(t);

      }

}

 private class TriggerScannerThread extends Thread {

    private BlockingQueue<Trigger> triggers;

 

这样,一个调度任务就插入到了一个BlockingQueue,

 

当然,如果有兴趣的话,还可以看这个变量的初始化部分:

public TriggerScannerThread(long scannerInterval) {

      triggers = new PriorityBlockingQueue<Trigger>(1, new TriggerComparator());

      justFinishedFlows = new ConcurrentHashMap<Integer, ExecutableFlow>();

      this.setName("TriggerRunnerManager-Trigger-Scanner-Thread");

      this.scannerInterval = scannerInterval;

    }

原来是一个PriorityBlockingQueue,这样排序都不用自己做了,很方便!

------------------

先看看这个线程什么上下文初始化的?

下文再说!

 


© 著作权归作者所有

共有 人打赏支持
强子哥哥

强子哥哥

粉丝 856
博文 551
码字总数 647493
作品 8
南京
架构师
强子哥哥/MyAzkaban

#MyAzkaban Azkaban是由Linkedin开源的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。 Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一...

强子哥哥 ⋅ 2016/04/15 ⋅ 0

我的第2个开源项目:MyAzkaban-3.0.0

网址: http://git.oschina.net/qiangzigege/MyAzkaban http://azkaban.github.io/azkaban/docs/latest 官方例子: https://github.com/joeharris76/azkabanexamples 为什么要做这个东西? ......

强子哥哥 ⋅ 2016/04/14 ⋅ 0

#研发解决方案#分布式并行计算调度和管理系统Summoner

郑昀 创建于2015/11/10 最后更新于2015/11/12 关键词:佣金计算、定时任务、数据抽取、数据清洗、数据计算、Java、Redis、MySQL、Zookeeper、azkaban2、oozie、mesos Summoner 是国玺部门推出...

旁观者-郑昀 ⋅ 2016/01/08 ⋅ 0

批量工作流任务调度器--MyAzkaban

azkaban是由Linkedin开源的一个批量工作流任务调度器,在研究3.0.0版本的过程中,发现有一些问题:比如 定时调度参数下拉框中秒选项默认不显示、根据工作类型生成实例时有bug。所以创建此项目...

强子哥哥 ⋅ 2016/04/15 ⋅ 2

hadoop工作流引擎azkaban

介绍 Azkaban是twitter出的一个任务调度系统,操作比Oozie要简单很多而且非常直观,提供的功能比较简单。Azkaban以Flow为执行单元进行定时调度,Flow就是预定义好的由一个或多个可存在依赖关...

wayhk ⋅ 2016/05/13 ⋅ 0

Azkaban的定时调度任务分析34:定时执行下文

下面说线程azkaban.trigger.TriggerManager.TriggerScannerThread是如何运作的 1)初始化 stop in azkaban.trigger.TriggerManager$TriggerScannerThread.xxx run 初始化的上下文是: java.l......

强子哥哥 ⋅ 2016/04/12 ⋅ 0

什么是Azkaban

Azkaban是一款基于Java编写的任务调度系统 任务调度:有四个任务脚A、B、C、D,其中任务A与任务B可以并行运行,然后任务C依赖任务A和任务B的运行结果,任务D依赖任务C的运行结果,此时整个过程...

jackwxh ⋅ 2017/04/01 ⋅ 0

1、azkaban介绍

azkaban是一个定时的任务调度器,任务之间有依赖关系,只需要将任务打包成zip包,上传上去就可以了。

刘付kin ⋅ 2016/12/01 ⋅ 0

定时任务发展史(二)

第一代定时任务系统上线用了大概半年之后,就被我们厌倦了。于是就规划了第二代定时任务系统。 第二代定时任务系统 第二代调度系统主要解决的是,避免每次修改定时任务的执行时间都需要重新启...

ityouknow ⋅ 2017/07/07 ⋅ 0

java定时调度器解决方案分类及特性介绍

什么是定时调度器? 我们知道程序的运行要么是由事件触发的,而这种事件的触发源头往往是用户通过ui交互操作层层传递过来的;但是我们知道还有另外一种由机器系统时间触发的程序运行场景。大...

杨武兵 ⋅ 2016/02/26 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 32分钟前 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

vim编辑模式、vim命令模式、vim实践

vim编辑模式 编辑模式用来输入或修改文本内容,编辑模式除了Esc外其他键几乎都是输入 如何进入编辑模式 一般模式输入以下按键,均可进入编辑模式,左下角提示 insert(中文为插入) 字样 i ...

蛋黄Yolks ⋅ 昨天 ⋅ 0

大数据入门基础:SSH介绍

什么是ssh 简单说,SSH是一种网络协议,用于计算机之间的加密登录。 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码...

董黎明 ⋅ 昨天 ⋅ 0

web3j教程

web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 汇智网最新发布的web3j教程,详细讲解...

汇智网教程 ⋅ 昨天 ⋅ 0

谷歌:安全问题机制并不如你想象中安全

腾讯科技讯 5月25日,如今的你或许已经对许多网站所使用的“安全问题机制”习以为常了,但你真的认为包括“你第一个宠物的名字是什么?”这些问题能够保障你的帐户安全吗? 根据谷歌(微博)安...

问题终结者 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部