任务调度中心系统概要设计.docx

上传人:b****8 文档编号:10363346 上传时间:2023-02-10 格式:DOCX 页数:19 大小:285.94KB
下载 相关 举报
任务调度中心系统概要设计.docx_第1页
第1页 / 共19页
任务调度中心系统概要设计.docx_第2页
第2页 / 共19页
任务调度中心系统概要设计.docx_第3页
第3页 / 共19页
任务调度中心系统概要设计.docx_第4页
第4页 / 共19页
任务调度中心系统概要设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

任务调度中心系统概要设计.docx

《任务调度中心系统概要设计.docx》由会员分享,可在线阅读,更多相关《任务调度中心系统概要设计.docx(19页珍藏版)》请在冰豆网上搜索。

任务调度中心系统概要设计.docx

任务调度中心系统概要设计

 

任务调度中心系统

 

当前版本

作者

修改记录

更新时间

版本

修订人

修改内容

 

一、设计目的

●目前整个市场任务调度非常粗糙,基本仅靠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表中更新

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1