datax(三)源码阅读之脚本入口datax.py

目录

一、整体流程

二、获取参数解析器解析参数流程

三、构建启动命令流程

四、总结


 

一、整体流程

我们线上使用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",
                       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值