- 内容提要
- 序
- 前言
- 第一部分 背景知识
- 第 1 章 Spring Data 项目
- 第 2 章 Repository:便利的数据访问层
- 第 3 章 使用 Querydsl 实现类型安全的查询
- 第二部分 关系型数据库
- 第 4 章 JPA Repository
- 第 5 章 借助 Querydsl SQL 实现类型安全的 JDBC 编程
- 第三部分 NoSQL
- 第 6 章 MongoDB: 文档存储
- 第 7 章 Neo4j:图数据库
- 第 8 章 Redis:键/值存储
- 第四部分 快速应用开发
- 第 9 章 使用 Spring Roo 实现持久层
- 第 10 章 REST Repository 导出器
- 第五部分 大数据
- 第 11 章 Spring for Apache Hadoop
- 第 12 章 使用 Hadoop 分析数据
- 第 13 章 使用 Spring Batch 和 Spring Integration 创建大数据管道
- 第六部分 数据网格
- 第 14 章 分布式数据网格:GemFire
- 关于封面
11.7 Job 调度
应用程序通常需要调度和执行任务,这些任务可能是发送一封 Email 或运行一个耗时的批量处理程序。 Job Schedulers 是一类提供这种功能的软件。你可能已经知道,这类产品有很多,包括通用的 UNIX cron 工具甚至更复杂的开源和商业产品,如 Quartz、Control-M 与 Autosys。Spring 提供多种 Job 调度方式,包括 JDKTimer、集成 Quartz 以及 Spirng 自带的 TaskScheduler。本节介绍如何使用 Quartz 与 Spring 的 TaskScheduler 来调度和执行 Hadoop 应用程序。
11.7.1 使用 TaskScheduler 调度 MapReduce Job
在这个示例中,我们会在之前开发的应用程序中加上任务调度的功能,用来执行 HDFS 脚本以及 wordcount 的 MapReduce Job。Spring 的 TaskScheduler 和 Trigger 接口可对将要运行的任务进行调度。Spring 提供了一些实现,常见的选择为 ThreadPoolTaskScheduler 和 CronTrigger。我们可以使用 XML 命名空间加上一个基于注解的编程模型将任务设置为由触发器进行调度。
在示例 11-32 的配置中,我们使用 XML 命名空间,它会调用任意由 Spring 管理的对象的方法,在这个案例中也就是 JobRunner 实例的 call 方法。触发器是一个 cron 表达式,它会从第 3 秒开始,每隔 30 秒触发一次。
示例 11-32 定义 TaskScheduler 来执行 HDFS 脚本以及 MapReduce Job


JobRunner 的 run-at-startup 元素的默认值是 false,因此在这个配置中,不会在应用程序启动的时候执行 HDFS 脚本与 Hadoop Job。使用这个配置能够让调度器成为系统中唯一负责执行脚本和 Job 的组件。
这个示例应用程序位于目录 hadoop/scheduling。在执行这个应用程序时,可以看到如示例 11-33 所示的(被截断的一部分)输出,其中时间戳符合 cron 表达式的定义。
示例 11-33 调度 wordcount 应用程序的输出

正如你所见,task 的命名空间非常易于使用,但是它也有许多功能(在这里我们将不涉及这些功能)与线程池策略有关或者委托给 CommonJ WorkManager 代理。Spring 框架的参考文档( http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html )详细说明了这些特性。
11.7.2 使用 Quartz 调度 MapReduce Job
Quartz( http://quartz-scheduler.org/ )是一个广受欢迎的开源任务调度框架,具有许多高级功能,如集群。在这个示例中,我们将之前示例所使用的 Spring TaskScheduler 替换成 Quartz。Quartz 调度要求定义 Job(即 JobDetail)、Trigger 以及 Scheduler,如示例 11-34 所示。
示例 11-34 定义 Quartz 调度来执行 HDFS 脚本和 MapReduce Job

Quartz 的 JobDetail 类封装了满足触发条件时要执行的程序。Spring 的辅助类 MethodInvokingJobDetailFactoryBean 会建立一个 JobDetail 对象,它的功能是调用 Spring 管理对象中的指定方法。这个应用程序位于目录 hadoop/scheduling-quartz。程序的执行结果与基于 Spring TaskScheduler 示例所得到的结果类似。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论