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