文章出自: http://blog.csdn.net/lili72
1、 能定时发起各类型的任务
1.1 任务类型比如 shell脚本,或者jar 程序,或者调用存储过程
1.2 可以设置每天什么时候开始执行,每天执行几次。或者每隔多久执行一次(类crontab)
1.3 数据平台一般的任务类型有:
1.3.1 101任务: 检查数据源文件是否到齐(包括文件个数,或者是.ok文件),如果到齐,把任务状态标志为成功,如果没有到齐循环多次检测,任务状态标志为进行中。可能由于各种原因会导致数据源延迟,所有需要多次循环检测数据源,而不是把该任务标志位出错。而如果数据源迟迟没有成功执行,会影响到后面所有的报表ETL任务,所以最好的设计是假如数据源检测任务超过一定的时间没有成功完成,则预警到对应的负责人。短信或邮件通知负责人需要处理该数据源,数据源很可能出现问题。最好一个数据源配置一个101任务,而不是所有的数据源配置一个任务,这样就尽量减少了数据源之间的耦合。不会因为某个数据源的延迟或问题影像整个数据平台的数据。实现方式可以是shell脚本,检查对应数据源的.ok文件是否生成。灵活一点可以用程序实现,把要监控的内容都配置到数据库中,程序通过读取数据库中的配置内容检测各数据源的到达情况。
1.3.2 102任务:加载数据到hdfs中。判断各自的数据源依赖任务是否已经成功完成,如果完成进行加载任务。
1.3.3 103任务:数据清洗转换。这里有数据去重,数据转码,去掉脏数据等
1.3.4 104任务:执行报表或者其它数据应用层转换。
1.3.5 105任务:清理任务(清理一些日志或者很久不用的数据),或者数据转移任务,把数据sqoop到关系型数据。
2、 能在依赖完成之后才开始执行(执行任务之前,首先必须检测自己的依赖任务是否已经成功执行完成,如果是则执行当前任务,否则当前任务进入等待队列)
3、 能触发下级任务执行(当前任务成功执行完成,触发依赖当前任务的下级任务开始执行)
4、 支持并发操作(多个没有关系依赖的任务,可以同步执行)
5、 支持分布式调度 (如果调度的任务很多,在一台机器集中触发,对该台机器的压力很大,最好可以分布在多台机器上执行)
6 、任务分配优先级(有些报表,或者算法优先级别比较高,需要尽快完成)
7、 可以可视化管理任务(比如:手动停止正在运行的任务,手动触发其它任务运行)
8、 出错可以多次自动重新发起(由于平台本身的bug hadoop,hive等都有自身的bug,重新发起一次,就可以正常运行了,hive中最常见的是高并发找不到表Table ‘hive.DELETEME1414791576856‘ doesn‘t exist)。
9、 出错会记录出错日志并预警。(有了日志可以很快定位出问题的原因,或者记录任务在hadoop中的jobid,可以到hadoop的日志中查询任务的报错原因)
10 、 记录任务的执行时间(包括开始执行时间,结束时间,任务耗时,记录这些时间可以评估整个调度系统的繁忙时间和空闲时间,有利于后续配置任务,同时可以监控任务的运行情况,优化某些任务)
当然大家可以先研究下开源的淘宝调度:
easyschedule http://code.taobao.org/p/easyschdeule/src/