整体执行流程包括preHandle、init、prepare、split、schedule、post、postHandle、invokeHooks、destroy、logStatistics。preHandle需要设置job.preHandler.pluginType和job.preHandler.pluginName,前者是PluginType枚举中的值,包括READER、TRANSFORMER、WRITER、HANDLER,后者是插件的名称。可以通过这两个值找到对应的plugin(这个过程在上一篇文章中有提到),并执行preHandler方法。initinit主要加载Reader.Job和Writer.Job这两个插件,加载完成后调用Reader.Job和Writer.Job对应的init方法。例如,HdfsReader和HdfsWriter用于验证所需项和数据的有效性,并初始化org.apache.hadoop.conf.Configuration。比如MysqlReader处理where条件,检查用户名和密码是否配置,数据库是否可以连接,表是否存在等,prepare调用Reader.Job和Writer.Job对应的prepare方法。例如HdfsReader用于获取指定路径列表下所有满足条件的文件的绝对路径。比如MysqlWriter在单表的时候执行presql。split调用了Reader.Job和Writer.Job对应的split方法,将reader和writer切分,reader和writer是1:1的关系。比如MysqlReader会根据主键进行拆分。例如,HdfsReader会根据文件的数量进行拆分。拆分后会重新生成job.content,其中包含Configurations列表,每个Configuration对应reader和writer的信息。schedule任务调度的地方,这个在后面的章节会讲到。post调用Reader.Job和Writer.Job对应的post方法。比如MysqlWriter在单表的情况下执行postSql语句。postHandle需要设置job.postHandler.pluginType和job.postHandler.pluginName,前者是PluginType枚举中的值,包括READER、TRANSFORMER、WRITER、HANDLER,后者是插件的名称。可以通过这两个值找到对应的插件,执行postHandle方法。invokeHooks主要调用外部钩子。destroy调用Reader.Job和Writer.Job对应的destroy方法。logStatistics用于打印结果。
