datax源码阅读一:python文件-阿里云开发者社区

开发者社区> huawei.lv> 正文

datax源码阅读一:python文件

简介: datax源码阅读一
+关注继续查看

一、前面主要是怎么使用datax和datax的插件编写,后面主要说明源码阅读部分,python相关文件

二、datax关键代码(python datax.py test.json)
1、datax.py文件

printCopyright()
parser = getOptionParser(sys.argv[1:])
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) == 0:
    parser.print_help()
    sys.exit(RET_STATE['FAIL'])
startCommand = buildStartCommand(options, args)
child_process = subprocess.Popen(startCommand, shell=True)

上面代码关键部分是函数buildStartCommand(options, args)拼出来的java命令,然后启动一个新的子进程去执行java命令

def buildStartCommand(options, args):
commandMap = {}
tempJVMCommand = DEFAULT_JVM
if options.jvmParameters:
    tempJVMCommand = tempJVMCommand + " " + options.jvmParameters

if options.remoteDebug:
    tempJVMCommand = tempJVMCommand + " " + REMOTE_DEBUG_CONFIG
    print 'local ip: ', getLocalIp()

if options.loglevel:
    tempJVMCommand = tempJVMCommand + " " + ("-Dloglevel=%s" % (options.loglevel))

if options.mode:
    commandMap["mode"] = options.mode

# jobResource 可能是 URL,也可能是本地文件路径(相对,绝对)
jobResource = args[0]
if not isUrl(jobResource):
    jobResource = os.path.abspath(jobResource)
    if jobResource.lower().startswith("file://"):
        jobResource = jobResource[len("file://"):]

jobParams = ("-Dlog.file.name=%s") % (jobResource[-20:].replace('/', '_').replace('.', '_'))
if options.params:
    jobParams = jobParams + " " + options.params

if options.jobid:
    commandMap["jobid"] = options.jobid

commandMap["jvm"] = tempJVMCommand
commandMap["params"] = jobParams
commandMap["job"] = jobResource

return Template(ENGINE_COMMAND).substitute(**commandMap)

java命令是通过模板ENGINE_COMMAND和commandMap拼接而成,其中ENGINE_COMMAND是主要的java脚本命令

ENGINE_COMMAND = "java -server ${jvm} %s -classpath %s  ${params} com.alibaba.datax.core.Engine -mode ${mode} -jobid ${jobid} -job ${job}" % (DEFAULT_PROPERTY_CONF, CLASS_PATH)

commandMap中包含jvm参数、任务动态参数和job文件信息(json配置文件),根据这个python文件,用户可以自行修改jvm相关参数,如

DEFAULT_JVM = "-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%s/log" % (DATAX_HOME)

2、上述python文件执行完毕之后会启动java命令,主函数是com.alibaba.datax.core.Engine,至此python文件主要流程完毕

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用Python六步制作小鸟管道游戏(附源码)
现在用Python来制作游戏越来越方便,虽然某些方面有所限制。但是利用Pygame工具包基本能制作所有的2D游戏
14 0
关于在eclipse开发环境上打开手机data文件
使用Eclipse开发Android上的数据库应用,需要把数据库文件放到/data/data/mynamespace/database文件夹下,普通手机通过ROOT后经常还是看不到这个文件夹,这时需要用RE管理器重设一下/data/data/mynamespace/database各级目录的权限即可。
987 0
iOS开发笔记 7、数据【Preferences、文件、库、Core Data】
程序开发中根据要使用各种各样的数据,如配制、文件系统、数据库等,iOS对这个有很好的支持 Preferences If you’re going to create a program that has built-in preferences, you should do so using the Utility Application template.
818 0
读取Mat文件中的汉字代码
拿到一种元数据,格式为*.mat,但Access打不开,百度也没看到比较好的解决方案。 但是用文本文档可以打开,那估计它和txt类似了,于是想自己写代码来处理了,立马写了读取的丑陋工具。读取是没什么问题,但有部分文件读取出来有中文乱码。
570 0
源码安装python2.7
[root@server /]# tar -zxf Python-2.7.11.tgz [root@server /]# cd Python-2.7.11 [root@server /]# .
589 0
Python制作十款经典的童年游戏(附源码)
不知道行友们每年六一是怎么度过的,行哥的童年是在游戏世界里度过。这里行哥分享一下十个python可以制作的经典游戏,看看有没有你的菜,代码链接放在文末 对了以下游戏皆是小学六年级的代码水平
30 0
+关注
9
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载