目录
一、整体流程
我们线上使用datax,一般会通过执行datax.py进行datax任务的启动,比如执行如下命令:python datax.py datax.json
我们聚焦到datax.py的main方法:
if __name__ == "__main__":
printCopyright() // 1.打印版权信息
parser = getOptionParser() // 2.获取参数解析器解析参数
options, args = parser.parse_args(sys.argv[1:])
if options.reader is not None and options.writer is not None:
generateJobConfigTemplate(options.reader,options.writer)
sys.exit(RET_STATE['OK'])
if len(args) != 1:
parser.print_help()
sys.exit(RET_STATE['FAIL'])
startCommand = buildStartCommand(options, args) // 3.构建启动命令
print startCommand
child_process = subprocess.Popen(startCommand, shell=True) // 4.启动java子进程
register_signal()
(stdout, stderr) = child_process.communicate()
sys.exit(child_process.returncode)
我们可以看到总体执行流程分为:
1.打印datax版权信息
2.获取参数解析器解析参数
3.构建启动命令
4.启动java子进程。
这边比较核心的流程是获取参数解析器解析参数和构建启动命令,下面我们着重分析这两个过程。
二、获取参数解析器解析参数流程
核心方法是getOptionParser()方法,如下
def getOptionParser():
usage = "usage: %prog [options] job-url-or-path"
parser = OptionParser(usage=usage)
prodEnvOptionGroup = OptionGroup(parser, "Product Env Options",
"Normal user use these options to set jvm parameters, job runtime mode etc. "
"Make sure these options can be used in Product Env.")
prodEnvOptionGroup.add_option("-j", "--jvm", metavar="<jvm parameters>", dest="jvmParameters", action="store",
default=DEFAULT_JVM, help="Set jvm parameters if necessary.")
prodEnvOptionGroup.add_option("--jobid", metavar="<job unique id>", dest="jobid", action="store", default="-1",