任务调度中心系统概要设计.docx
- 文档编号:10363346
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:19
- 大小:285.94KB
任务调度中心系统概要设计.docx
《任务调度中心系统概要设计.docx》由会员分享,可在线阅读,更多相关《任务调度中心系统概要设计.docx(19页珍藏版)》请在冰豆网上搜索。
任务调度中心系统概要设计
任务调度中心系统
当前版本
作者
修改记录
更新时间
版本
修订人
修改内容
一、设计目的
●目前整个市场任务调度非常粗糙,基本仅靠Crontab来定时运行,日志清洗、日志校验、数据分析、入库各模块之间无有效依赖,经常由于前置任务出错或者未完成,后续的任务运行出错,并且对任务出错的监控不到位,造成分析数据不能及时入库,导致线上BUG。
●真实业务场景下合理的任务运行图:
(图一)
1.定时触发一个日志校验的Job,去检查清洗后的日志是否已经就绪;
2.分析的JOB均依赖日志校验的Job,一旦日志校验的Job执行成功,则并发启动依赖其的分析Job1-4;
3.入库JOB1依赖分析JOB1和分析JOB2,如果这两个分析JOB全部执行成功,则启动执行入库JOB1;
4.对于入库JOB2,如果分析JOB3和分析JOB4有一个未成功执行,则入库JOB2就不执行;
●一个复杂的任务依赖图:
●为了解决数据平台分配任务的稳定性,时效性,因此设计开发任务调度中心系统,旨在解决任务的统一配置,统一调度,统一监控告警等功能,减少开发人员的开发和维护成本,提高平台的稳定性。
二、整体架构
2.1核心功能
1.Job维护:
添加、修改、删除、杀死Job;
2.Job依赖关系维护:
添加、修改、删除Job之间的依赖关系;
3.查询类:
查询Job列表、根据状态查询Job列表、查询Job的父子依赖等;
4.资源维护:
添加、修改、删除资源,查询资源列表;
5.Job触发:
支持定时、依赖、手工触发调度Job;
6.任务失败告警:
当任务失败或者某个时间点未成功结束时,触发邮件和短信报警;
7.支持任务类型包括:
shell、python、MapReduce、Hive、DataHub任务的调度及监控;
8.可扩展性:
Slave(JobWorker)可根据需要随时扩充;
2.2核心组件
1.元数据库:
Mysql,保存Job的配置、依赖关系、运行历史、资源配置、告警配置等;
2.JobClient:
客户端类,对外的唯一接口;
3.JobManager:
Master,提供RPC服务,接收并处理JobClient提交的所有操作;与元数据库通讯,维护Job元数据;负责任务的统一配置维护、触发、调度、监控;
4.JobMonitor:
监控正在运行的Job状态、监控任务池、监控等待运行的Job;
5.JobWorker:
Slave,从任务池中获取Job、负责启动并收集Job的执行状态,以心跳方式发送给JobManager;
以上各组件下文中详细介绍。
三、Job元数据
元数据存储于Mysql。
四、JobClient
1.用户与系统交互的唯一接口;
2.封装提供给用户使用的所有接口,单例模式,使用时候指定JobManager的RPChostname和端口号;
3.拥有JobManager的RPC代理,将用户提交的操作通过RPC调用JobManager的相应接口进行处理;
4.提供的接口包括:
●操作Job,包括增加,修改,删除,运行,杀死Job等;
●维护Job依赖关系;
●配置、查询资源;
●查询Job信息,包括指定条件查询,如状态,JobID,时间等;
●查询Job依赖;
五、JobManager(Master)
任务调度中心系统的Master节点,负责所有任务的调度,分发,状态跟踪,报警,资源管理等。
5.1RPCServer
●JobManager自身为一个RPCServer,为JobClient提供调用接口;
●为JobClient提供的RPC接口:
✓Job操作类接口:
保存Job,根据JobID获取Job,获取所有Job,获取新的JobID,删除Job;
✓Job依赖关系维护接口:
添加、删除Job依赖,查询Job的父子依赖;
✓查询类接口;查询正在运行的Job,查询Job的历史运行,查询一个时间段内的Job等;
✓维护类接口:
停止JobManager,添加、修改、删除资源,获取资源列表;
5.2数据库管理服务类
●JobStoreManager,封装所有与元数据库通讯的接口,用于Job元数据的持久化和查询。
●使用数据库链接池;
●接口列表:
5.3资源管理服务
●ResourceManager,负责Job资源的计算和分配;
●资源包括:
主机名/IP,可运行的任务类型,最大运行的任务数量;
●初始化将资源配置表中已分配的Job数全部设为0;
●资源申请流程:
✓根据Job类型,首先从资源配置表中获取可以运行该类型Job的节点、最多可运行的Job数量、已分配出去的Job数量;
✓从上面获取的节点中取(max_job_count–running_job_count)>0,并按照(max_job_count–running_job_count)降序排列,取第一条记录;
✓如果有返回主机名,表示有资源,则将该资源已分配Job数量+1;
✓返回主机名;
✓如果没有记录返回,则表示没有资源,返回null;
●资源释放流程:
✓根据传入的hostname和job_type,将资源配置表中该记录已分配Job数量-1;
5.4Job依赖关系维护
●Neo4jService
●使用Neo4j保存任务的依赖关系,供查询使用;
●当Job的依赖关系发生变化时,需要在Neo4j中做相应的维护;
5.5定时调度器
●QuartzService
●维护定时运行的Job,当Job到达任务触发时间时,提交Job运行;
5.6Job监控
●监控超时未成功执行的Job,触发告警(可依靠Quartz定时触发);
●监控正在运行的Job列表,当Job长时间未更新时,做相应处理;
●监控待运行Job队列,并尝试提交Job;
●监控任务池,从任务池中删除被拿走的Job;
5.7告警服务
●提供告警服务,目前只提供邮件告警服务
5.8初始化流程
●获取RPChost&port:
从配置文件conf/master.xml中获取;
●构建RPCServer;
●初始化Neo4j服务;
●从数据库中初始化加载所有Job;
●从数据库中初始化job依赖;
●初始化资源管理服务;
●构建Quartz服务;
5.9启动流程
●初始化;
●启动jobManagerRPCServer;
●registerShutdownHook;
●启动Neo4j服务线程;
●启动Quartz服务线程;
●启动Job监控线程;
5.10成功Job处理流程
●更新Job状态;
●获取该Job的一级子Job,分别检查子Job的其他父Job,如果父Job全部完成,则提交该Job运行;如果有父Job未完成,则将该Job加入因前置Job未全部完成而等待运行的Job队列
5.11失败Job处理流程
●更新Job状态;
●告警;
六、JobWorker(Slave)
6.1内存数据结构
●正在运行的JobExecutor列表;
6.2定期从获取可以运行的Job
●定期从任务池获取可以运行的Job
●定期汇总各个Job状态,并更新;
6.3执行Job
●根据Job类型,构建相应的JobExecutor,执行并收集Job执行日志;
七、核心流程图
7.1Job维护流程
●添加、修改Job
●删除Job
7.2Job依赖维护流程
●添加Job依赖
●删除Job依赖
7.3资源维护流程
●添加、修改资源
●删除资源
7.4Job提交流程
●Job自动提交(定时触发和依赖触发)
●Job手动提交(由JobClient提交)
7.5Job执行流程
7.6Job监控流程
●监控任务池
●监控等待运行的Job
●监控正在运行的Job
八、后台部署与运行
8.1安装
●解压
●解压后目录结构:
conf/##配置文件
bin/##执行脚本
lib/##第三方jar包
Manager.jar##核心jar包
8.2数据库建库建表
●建库:
●赋权:
●建表:
8.3配置
●conf/c3p0.properties
c3p0数据库链接池。
●conf/mail.properties
发送告警邮件配置。
●conf/master.properties
JobManager配置文件。
✓job_manager_rpc_host=172.16.0.1//JobManagerRPC运行主机ip
✓job_manager_rpc_port=2234//JobManagerRPC运行端口号
✓job_monitor_scan_period=10//JobMonitor扫描数据库时间间隔
●conf/slave.properties
JobWorker配置文件。
✓job_worker_scan_period=5//JobWorker线程扫描数据库间隔,单位:
秒
✓job_log_dir=/usr/local/skynet/logs//JobWorker记录的日志路径
✓job_worker_jetty_port=9911//JobWorker中Jetty服务端口号,用于查看Job运行日志
✓job_working_directory=/tmp/skynet///job执行工作目录,各用户必须有可读写权限,chmod–R777/tmp/skynet
●bin/net.sh
配置exportJAVA_HOME=/usr/local/jre1.7.0_67
●bin/monitor-net.sh
系统监控脚本。
配置exportJAVA_HOME=/usr/local/jre1.7.0_67
配置maillist=liu.xiaowen@//当系统运行异常时,发给管理员邮件告警
●开放相关端口访问权限
job_manager_rpc_port、job_worker_jetty_port
●配置环境变量
NET_HOME,JAVA_HOME
●数据库中配置初始数据
dmp_job_buseinss_type//业务类型
dmp_resource_config//资源
dmp_user//用户、用于前端页面登陆和权限控制
8.4运行
●运行JobManager
bin/net.shstartjm
启动后,在net/下产生jm.log日志文件
●运行JobWorker
bin/net.shstartjw
启动后,在net/下产生jw.log日志文件
●运行系统监控脚本
bin/monitor-net.sh
启动后,在net/下产生monitor.log日志文件(5分钟刷新一次)
8.5停止
●停止JobWorker
bin/net.shstopjw
●停止JobManager
bin/net.shstopjm
//会将JobManager和系统监控(monitor-net.sh)一起停止
九、部署与运行
9.1安装
●将net.war拷贝至$TOMCAT_HOME/webapps/
9.2配置
●开放8080端口
●配置tomcat数据库链接池:
$TOMCAT_HOME/conf/context.xml
driverClassName="com.mysql.jdbc.Driver" maxActive="50"maxIdle="10"maxWait="10000" username="net_reader"password="password" url="jdbc: mysql: //172.16.0.1: 3306/net" validationQuery='select1' testWhileIdle='true' timeBetweenEvictionRunsMillis='8000' minEvictableIdleTimeMillis='10000'/> ●配置后台服务信息: $TOMCAT_HOME/webapps/net/WEB-INF/classes/jm.properties job_manager_rpc_port=2234 job_manager_rpc_host=172.16.0.1 9.3运行 ●运行tomcat即可。 ●访问页面: http: //localhost: 8080/net/ ●用户名和密码直接在数据库dmp_user表中更新
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 任务 调度 中心 系统 概要 设计