JStorm源码分析(一)Storm执行脚本

本文详细解析了JStorm中Storm脚本的执行流程,包括如何通过main方法接收参数并调用对应命令,以及如何最终通过操作系统调用完成Topology任务的提交。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JStorm源码分析(一):Storm执行脚本

JStorm源码分析文件

对于整个JStorm源码分析系列,我将JStorm源码分析的文件放在我的GitHub上JStorm源码剖析,欢迎大家fork和star

storm脚本

Storm脚本是python脚本 调用storm脚本时,执行其中的main方法,mian方法源代码如下:

这里写图片描述

main方法中有两个参数: COMMAND = args[0] ARGS = args[1:]

所有的COMMAND: COMMANDS = {

“jar”: jar, “kill”: kill, “shell”: shell, “nimbus”: nimbus, “ui”: ui, “logviewer”: logviewer,

“drpc”: drpc, “supervisor”: supervisor, “localconfvalue”: print_localconfvalue, “remoteconfvalue”: print_remoteconfvalue, “repl”: repl, “classpath”: print_classpath, “activate”: activate, “deactivate”: deactivate, “rebalance”: rebalance, “help”: print_usage, “list”: listtopos, “dev-zookeeper”: dev_zookeeper, “version”: version, “monitor”: monitor

}
执行命令,提交Topology任务到集群: 命令如下:

storm jar WordCount.jar com.stone.WordCountMain wordcount

脚本的执行流程如下:

(1)获得COMMAND = args[0]参数,COMMAND = “jar”

(2)在COMMANDS 中找到对应的命令jar

(3)调用def jar 方法

这里写图片描述

(4)在def jar方法中,调用exec_storm_class

def exec_storm_class(klass,jvmtype="-server",jvmopts=[],extrajars=[],args=[], fork=False):
	globalCONFFILE storm_log_dir=confvalue("storm.log.dir",[CLUSTER_CONF_DIR]
	if(storm_log_dir==Noneorstorm_log_dir=="nil"): storm_log_dir=STORM_DIR+"/logs"
	all_args=[
	JAVA_CMD,jvmtype,get_config_opts(),
	"-Dstorm.home="+STORM_DIR,
	"-Dstorm.log.dir="+storm_log_dir, 
	"-Djava.library.path="+confvalue("java.library.path",extrajars), 
	"-Dstorm.conf.file="+CONFFILE,
	"-cp",get_classpath(extrajars),
	]+jvmopts+[klass]+list(args) print("Running:"+"".join(all_args)) 
if fork:
	os.spawnvp(os.P_WAIT,JAVA_CMD,all_args) 
else:
	os.execvp(JAVA_CMD,all_args)#replacesthecurrentprocessand #neverreturns

(5)在exec_storm_class中最终操作系统调用os.spawnvp(os.P_WAIT,JAVA_CMD,all_args)或 者os.execvp(JAVA_CMD,all_args)完成命令的执行。

也就是执行:

storm jar WordCount.jar com.stone.WordCountMain wordcount

实际上是调用:

java -client WordCount.jar com.stone.WordCountMain wordcount

相关系列文章

JStorm源码分析(二)Storm任务提交流程

JStorm源码分析(三)Nimbus的任务分配过程

JStorm源码分析(四)Storm集群启动过程

JStorm源码分析(五)Supervisor获取任务

JStorm源码分析(六)Supervisor启动Worker的过程

JStorm源码分析(七)Excutor启动和创建

微信公众号

有兴趣的同学可以关注一下小编哟!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值