1 Star 0 Fork 55

一個醒不來的堅持 / job-timer

forked from lianzt / job-timer 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

job-timer

定时任务管理工具,目前可管理三类任务:spark job、datax 数据导入/导出任务、shell脚本。

一个任务包含的属性有:标题、说明、类型(spark|datax|shell)、运行参数、开始时间、运行周期

定时任务以组的方式进行管理,进行一次数据分析通常需要多个任务协同工作,比如需要先导出数据到hdfs,然后用spark分析导出的数据,在导出数据时可能还需要做一些文件转移、重命名等操作。

这些任务有严格的执行顺序,这样的一系列任务放做为一个任务组运行。当分析任务比较简单时,也可以一个组中只包含一个任务。

功能模块

  • 任务组的增、删、改、查操作
  • 集成了livy控制台
  • 文件上传,可将文件直接上传到 hdfs
  • 状态监控 × 定时器模块

环境

基于 node.js v8.9 开发,由于使用了 async/await 关键字,所以运行环境至少 node.js v8.1 以上。

UI页面基于 vue + elementUI,需chrome 45 版本以上。

项目已在公司的linux服务器上线运行,操作系统理论上可支持 windows与mac,但未经过测试。

  • spark环境:与 spark 集群的通讯依赖 livy 实现,但是任务运行日志是使用 yarn 命令收集,所以 spark on yarn 模式可使用项目的完整功能,其它的 spark 集群模式只能发布任务,不能收集到任务日志(livy日志依然可以收集)。
  • datax环境:阿里的开源项目,依赖python2.7,需在path环境变量中配置python。
  • shell环境:脚本运行的根目录是项目所在目录,如果脚本对路径有要求,最好在脚本开头使用 cd 命令切换目录,windows环境下有可能会出现中文字符集问题(node.js默认UTF-8格式,windows bat 文件为操作系统默认)。
  • hadoop环境:文件上传功能使用的是 hadoop fs 命令,可直接把文件上传到hdfs,如果没有 hadoop 环境,不影响任务发布,只影响文件上传功能。

依赖

  • node.js v8.1 以上
  • mongodb 3.4 以上
  • apache livy 0.5
  • datax 3.0
  • chome浏览器 45
  • linux 操作系统
  • spark 2.0x
  • hadoop 2.7.x
  • 其它依赖见 package.json 与 admin/package.json

任务说明

spark job

基于 apache livy 工具二次开发,通过 livy 向 yarn 提交 jar,需注意 spark 运行的 jar 包要放置在 hdfs 中。

可参考 livy rest api 文档: https://livy.incubator.apache.org/docs/latest/rest-api.html

搭建过程:http://note.youdao.com/noteshare?id=ca7126842d0abc74c52998fab8e27306&sub=D7CED5916C2748A7BBAA6072297F5174

datax job

阿里开源的数据导入、导出工具,可以支持大部分存储介质之间相互提取导入,通常用于把 oracle 中的数据导入到 hive。

依赖 python 2.7

可参考文档:https://github.com/alibaba/DataX

shell job

基于 node.js child_process 模块的 execFile 函数开发,系统会将 shell 脚本保存成 sh 文件,然后调用 execFile 函数执行,需注意脚本输出不能大于200k。

参考文档:http://nodejs.cn/api/child_process.html#child_process_child_process_execfile_file_args_options_callback

默认的超时时间为 10分钟,暂不支持 args 参数列表,options可以使用。

配置

前台ui配置

UI界面目录是 /admin 基于VUE开发,是一个 使用 vue-cli 工具创建的项目,如果需要二次开发,参考 vue webpack 模板项目。

在UI界面中,以 iframe 方式加入了 livy 的控制台页面,所以需要配置 livy 的 url 地址,配置项为 LIVY_HOST,开发环境与生产环境分别对应以下两个文件:

  • /admin/config/dev.env.js 开发环境
  • /admin/config/prod.env.js 生产环境

后台配置

后台所有配置都在 /config.js 文件中,系统判断环境变量 RUN_MODULE = proc 为生产环境,其它值或未配置为开发环境,见 config.js 代码。

配置文件中同时保存了开发环境与生产环境的配置,修改配置时需要注意对应环境。所有配置项都是用? : 三元运行符配置的,如果没有表示开发环境与生产环境配置相同。

通常初次配置需要修改的配置项包括:

  • upload:文件上传临时目录
  • livy: apache livy api host
  • mongo:mongodb相关配置,如果需要安全验证,参考 mongodb模块 配置
  • datax:datax3.0 home 目录
  • log4js:日志输出
  • listenPort:占用端口,如果修改此项,会影响开发环境下的vue,还需修改 /admin/config/index.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 .

jobs

任务组

{
	_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
	}, ...]
}

logs

日志

{
	_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
}

界面

任务列表

任务列表

日志列表

日志列表

日志详细

日志详细

文件上传

文件上传

新建任务组

新建任务组

新建子任务

新建子任务

空文件

简介

定时任务管理工具,可提供spark、yarn大数据平台分析任务的运行与日志收集;集成阿里 datax 3.0 ETL工具,并提供图形界面的管理;集中式管理操作 shell 脚本的运行与日志收集。 提供以任务组的方式管理定时任务,可将前后连接比较紧密的任务放入一个组中,系统将按照顺序依次执行。 展开 收起
NodeJS
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
NodeJS
1
https://gitee.com/LJMing/job-timer.git
git@gitee.com:LJMing/job-timer.git
LJMing
job-timer
job-timer
master

搜索帮助

14c37bed 8189591 565d56ea 8189591