定时任务管理工具,目前可管理三类任务:spark job、datax 数据导入/导出任务、shell脚本。
一个任务包含的属性有:标题、说明、类型(spark|datax|shell)、运行参数、开始时间、运行周期
定时任务以组的方式进行管理,进行一次数据分析通常需要多个任务协同工作,比如需要先导出数据到hdfs,然后用spark分析导出的数据,在导出数据时可能还需要做一些文件转移、重命名等操作。
这些任务有严格的执行顺序,这样的一系列任务放做为一个任务组运行。当分析任务比较简单时,也可以一个组中只包含一个任务。
基于 node.js v8.9 开发,由于使用了 async/await 关键字,所以运行环境至少 node.js v8.1 以上。
UI页面基于 vue + elementUI,需chrome 45 版本以上。
项目已在公司的linux服务器上线运行,操作系统理论上可支持 windows与mac,但未经过测试。
基于 apache livy 工具二次开发,通过 livy 向 yarn 提交 jar,需注意 spark 运行的 jar 包要放置在 hdfs 中。
可参考 livy rest api 文档: https://livy.incubator.apache.org/docs/latest/rest-api.html
阿里开源的数据导入、导出工具,可以支持大部分存储介质之间相互提取导入,通常用于把 oracle 中的数据导入到 hive。
依赖 python 2.7
可参考文档:https://github.com/alibaba/DataX
基于 node.js child_process 模块的 execFile 函数开发,系统会将 shell 脚本保存成 sh 文件,然后调用 execFile 函数执行,需注意脚本输出不能大于200k。
默认的超时时间为 10分钟,暂不支持 args 参数列表,options可以使用。
由于 streaming 任务常驻 livy session,所以在一个任务组中只能包含一个 streaming 任务,而且必须为最后一个。
系统会每隔一段时间检查一次所有 streaming 任务的运行状态,对于异常退出的任务会尝试自动恢复。检查间隔可在 config.js 中配置,创建 streaming 任务时可选择是否自动恢复。
项目不会对 streaming 任务提取运行日志。
由于 streaming 是运行在 livy session 中,所以重启 job-timer 项目不会干扰到 streaming 任务的运行。
UI界面目录是 /admin 基于VUE开发,是一个 使用 vue-cli 工具创建的项目,如果需要二次开发,参考 vue webpack 模板项目。
在UI界面中,以 iframe 方式加入了 livy 的控制台页面,所以需要配置 livy 的 url 地址,配置项为 LIVY_HOST,开发环境与生产环境分别对应以下两个文件:
后台所有配置都在 /config.js 文件中,系统判断环境变量 RUN_MODULE = proc 为生产环境,其它值或未配置为开发环境,见 config.js 代码。
配置文件中同时保存了开发环境与生产环境的配置,修改配置时需要注意对应环境。所有配置项都是用? :
三元运行符配置的,如果没有表示开发环境与生产环境配置相同。
通常初次配置需要修改的配置项包括:
web ui 使用 vue + elementUi 开发,使用以下命令
# 生产环境
# 启动 livy、mongodb,配置 python、hadoop 环境变量
cd admin
npm install #安装web ui相关包
npm run build #ui系统打包
./publish.sh #部署到 public 目录
cd ..
npm install #安装后台相关包
npm start #运行,或 pm2 start bin/www
# 开发模式
cd admin
npm install #安装web ui相关包
npm run dev #运行 vue 项目,默认占用8080端口,如果8080被占用,会自动调整端口,详细见命令输出
#另开启一个终端运行后台
npm install
npm start
数据库使用的是 mongodb .
任务组
{
_id: '', //mongodb 自动生成
title: '',
description: '',
beginTime: new Date(''), //开始运行的时间
cycle: 10000, //运行周期,单位 ms
status: '1', //状态:0-不可用,1-可用
lastRunTime: Date,
lastLog: '_id of logs',
group: [{ //任务组,顺序执行组中的任务
id: 0, //组中的id,在同一组中不可重复
title: '',
description: '',
type: 'spark | datax | shell', //任务类型,对应不同的执行插件
args: {}, //任务参数
lastRunTime: Date
}, ...]
}
日志
{
_id: '', //mongodb 自动生成
jobId: '_id of jobs',
title: '',
group: [{
id: 0,
title: '',
type: 'spark | datax | shell',
args: {},
log: 'text | file',
begin_time: Date,
end_time: Date
}],
beginTime: Date,
endTime: Date
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
Activity
Community
Health
Trend
Influence
:Code submit frequency
:React/respond to issue & PR etc.
:Well-balanced team members and collaboration
:Recent popularity of project
:Star counts, download counts etc.