Flink JAR包上传和运行逻辑

说明

  1. 目标:走读Flink Clint中Upload jar、Run jar相关代码
  2. 源码版本:1.6.1
  3. 部属模式:Standalone
  4. 相关知识点:Netty、 CompletedFuture

启动ResetServer

RestServerEndpoint.start

注册Handler

代码From DispatcherRestEndpoint.java

protected List<Tuple2<RestHandlerSpecification, ChannelInboundHandler>> initializeHandlers(CompletableFuture<String> restAddressFuture) {
   
		List<Tuple2<RestHandlerSpecification, ChannelInboundHandler>> handlers = super.initializeHandlers(restAddressFuture);
    ...

	JobSubmitHandler jobSubmitHandler = new JobSubmitHandler(
		restAddressFuture,
		leaderRetriever,
		timeout,
		responseHeaders,
		executor,
		clusterConfiguration);

	if (clusterConfiguration.getBoolean(WebOptions.SUBMIT_ENABLE)) {
   
		try {
   
		    // 此处注册了JAR Upload和Run的处理方法
			webSubmissionExtension = WebMonitorUtils.loadWebSubmissionExtension(
				leaderRetriever,
				restAddressFuture,
				timeout,
				responseHeaders,
				uploadDir,
				executor,
				clusterConfiguration);

			// register extension handlers
			handlers.addAll(webSubmissionExtension.getHandlers());
		} catch (FlinkException e) {
   
		...
		}
	} else {
   
		log.info("Web-based job submission is not enabled.");
	}

    ...

	return handlers;
}

在WebSubmissionExtension中,可以看到定义了Upload、Run、List、Delete、Plan的Handler

Upload JAR

处理代码在JarUploadHandler的handleRequest方法中。

Jar包存放路径:

jarDir.resolve(UUID.randomUUID() + "_" + fileUpload.getFileName());

方法本身逻辑简单,比较隐蔽的是jarDir的值。通过倒推寻找该值的赋值过程。

  1. JarUploadHandler 构造时赋值属性jarDir;
  2. JarUploadHandler由WebSubmissionExtension通过WebMonitorUtils.loadWebSubmissionExtension构造,jarDir源自父类RestServerEndpoint中的变量uploadDir;
  3. RestServerEndpoint中uploadDir通过configuration.getUploadDir()初始化
  4. 在RestServerEndpointConfiguration中找到了源头:
    final Path uploadDir = Paths.get(
    	config.getString(WebOptions.UPLOAD_DIR,	config.getString(WebOptions
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值