1、传统crontab管理任务
crontab -e
注意日志的重定向,方便排错
*/5 * * * * /opt/bin/hive_opt/synclog_5min.sh > /cronlog/syn_by_5min/synclog_5min.log 2>&1
2、 开源工作流Azkaban与Oozie对比
功能
二者都可以调度mapreduce,pig,java,脚本工作流任务
二者都可以定时履行工作流任务
工作流定义
Azkaban使用Properties文件定义工作流
Oozie使用XML文件定义工作流
工作流传参
Azkaban支持直接传参,例如${input}
Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}
定时履行
Azkaban的定时履行任务是基于时间的
Oozie的定时履行任务基于时间和输入数据
资源管理
Azkaban有较严格的权限控制,如用户对工作流进行读/写/履行等操作
Oozie暂无严格的权限控制
工作流履行
Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同1台节点)和multi server mode(executor server和web server可以部署在不同节点)
Oozie作为工作流服务器运行,支持多用户和多工作流
工作流管理
Azkaban支持阅读器和ajax方式操作工作流
Oozie支持命令行、HTTP REST、Java API、阅读器操作工作流
3、 rundeck自动化发布
RunDeck介绍
RunDeck是用Java/Grails写的开源工具,帮助用户在数据中心或者云环境中自动化各种操作和流程。通过命令行或者web界面,用户可以对任意数量的服务器进行操作,大大降低了对服务器自动化的门槛。RunDeck提供如下功能:
1). 提供web界面和命令行来执行shell命令和job
2). 自定义job步骤
3). 设置shell命令/job运行周期(类似cron table的功能)
4). 用户权限控制,支持LDAP/ActiveDirectory
5). 保存历史日志
6). 提供web API
通过以上功能,RunDeck可以在任意数量的服务器上批量执行不同的任务,降低对自动化的部署、执行、维护的工作。
RunDeck架构
RunDeck是基于Java的webapp服务,运行在Servlet容器里。用户登陆RunDeck,在web界面进行操作,请求对远程服务器进行操作。web通过HTTP(s)与RunDeck服务进行通信,RunDeck服务接受服务请求后,从配置文件里面读取用户权限,以及服务器资源的一些信息。结合权限以及资源信息,RunDeck服务通过ssh对远程的服务器进行操作,并将操作结果存放在数据库中。
RunDeck的应用
为了更好的利用RunDeck,我们主要从以下2个方面来配置,规划,管理我们的服务器资源和脚本资源。
a. 用project和tag对服务器进行分类
根据服务器资源的不同作用,可以将服务器组分成不同的项目类别,方便不同用户操作。比如我们就有一个专门的project是管理push功能的服务器。通过配置文件,可以赋予用户不同的权限,有些用户只能查看push组的服务器资源,有些用户可以操作。
虽然用project可以对不同服务器进行分组,但是同一个project的服务器有不同的作用。比如在push组的服务器项目中,又可以分数据库服务器,下载服务器,日志服务器等等。对于这种情况,通过给服务器打不同tag,这样需要对一批服务器执行相同操作,就非常方便。
b. 通过job来管理任务
RunDeck提供一个非常强大的功能,就是可以自己定义job。job由命令、脚本、其它的job组成。比如对于服务器上的各种web server,可以定义不同的job,执行不同的操作。实际配置中,我们就对apache服务器定义了三个job,分别对应启动、停止、重启apache服务。对于nginx服务器,定义job来配置nginx的端口号。通过job机制,用户可以定义、管理、维护各种脚本、操作,极大的提高自动化效率。