# job-timer **Repository Path**: kekevin/job-timer ## Basic Information - **Project Name**: job-timer - **Description**: 定时任务管理工具,可提供spark、yarn大数据平台分析任务的运行与日志收集;集成阿里 datax 3.0 ETL工具,并提供图形界面的管理;集中式管理操作 shell 脚本的运行与日志收集。 提供以任务组的方式管理定时任务,可将前后连接比较紧密的任务放入一个组中,系统将按照顺序依次执行。 - **Primary Language**: NodeJS - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 55 - **Created**: 2018-05-21 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # job-timer 定时任务管理工具,目前可管理三类任务:spark job、datax 数据导入/导出任务、shell脚本。 一个任务包含的属性有:标题、说明、类型(spark|datax|shell)、运行参数、开始时间、运行周期 定时任务以组的方式进行管理,进行一次数据分析通常需要多个任务协同工作,比如需要先导出数据到hdfs,然后用spark分析导出的数据,在导出数据时可能还需要做一些文件转移、重命名等操作。 这些任务有严格的执行顺序,这样的一系列任务放做为一个任务组运行。当分析任务比较简单时,也可以一个组中只包含一个任务 # 功能模块 * 任务组的增、删、改、查操作 * 集成了livy控制台 * 文件上传,可将文件直接上传到 hdfs * 状态监控 × 定时器模块 # 任务说明 ## 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可以使用。 # 运行 web ui 使用 vue + elementUi 开发,使用以下命令 ```shell cd admin npm install #安装web ui相关包 npm run build #ui系统打包 ./publish.sh #部署到 public 目录 cd .. npm start #运行 ``` # 配置文件 见 config.js 文件,会根据环境变量加载开发环境配置或生产环境配置, RUN_MODULE=proc 为生产环境。 config.js文件中使用了 ?: 三元运算符,同时配置了开发与生产环境的配置。 # 依赖 * node.js v8.1 以上 * mongodb 3.4 以上 * apache livy 0.5 * datax 3.0 * chome浏览器 65 * linux 操作系统 * spark 2.0x * hadoop 2.7.x * 其它依赖见 package.json 与 admin/package.json # 表结构 ## 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 } ```