Flink可以通过java代码将多个作业附加到带有Web Ui的流本地环境中吗?

Flink可以通过java代码将多个作业附加到带有Web Ui的流本地环境中吗?,java,apache-flink,flink-streaming,bigdata,Java,Apache Flink,Flink Streaming,Bigdata,Flink可以通过java代码将多个作业附加到带有Web Ui的流本地环境中吗 我的代码是这样的 env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(config); env.addSource(...); env.addSink(...); env.execute("stream job1"); 我想做的是循环执行此操作,并使用web ui管理将job2 job3附加到相同的环境中。如何在java代码中实现

Flink可以通过java代码将多个作业附加到带有Web Ui的流本地环境中吗

我的代码是这样的

env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(config); 
env.addSource(...); 
env.addSink(...); 
env.execute("stream job1"); 
我想做的是循环执行此操作,并使用web ui管理将job2 job3附加到相同的环境中。如何在java代码中实现这一点

我尝试使用
env2=StreamExecutionEnvironment.getExecutionEnvironment(),
但新的job2似乎不适合我以前创建的env


请帮助我提前感谢

您应该能够重新使用您存储在
env
中创建的
StreamExecutionEnvironment

StreamExecutionEnvironment.createLocalEnvironmentWithWebUI
不会设置相应的上下文环境工厂。因此,
StreamExecutionEnvironment.getExecutionEnvironment
将不会返回已启用Web UI的创建的本地环境。

似乎可以(使用单个
LocalStreamEnvironment
)一个执行多个

DataStream stream = env.addSource(...);
...
stream.addSink(...);
最后

env.execute();
然而,这似乎是一个包含多个源->汇流的作业,而不是多个作业


嗯。这里的黑客将作业提交到本地集群

在主线程中,使用一些配置启动本地集群

Configuration configuration = new Configuration();
configuration.setLong(TaskManagerOptions.MANAGED_MEMORY_SIZE, -1L);
configuration.setInteger(ConfigConstants.LOCAL_NUMBER_TASK_MANAGER, 2);
configuration.setInteger(ConfigConstants.TASK_MANAGER_NUM_TASK_SLOTS, 100);

// start cluster
LocalFlinkMiniCluster exec = new LocalFlinkMiniCluster(configuration, true);
exec.start();
// sleep or wait for all job finishes
Thread.sleep(Long.MAX_VALUE);
然后在其他线程中,提交作业(使用主线程中的
exec

注意
StreamExecutionEnvironment
仅用于生成
JobGraph
<代码>LocalFlinkMiniCluster是执行的地方


在最后一行中,您可以选择是否等待作业(
submitjobstached
)。

是的,我确实尝试过恢复它,但我得到了错误,说地址绑定已经在使用中,我认为出于某种原因,env尝试使用相同的jobmanager地址。我将很快用代码和错误消息更新我的questoin。谢谢你的帮助,你说得对。问题是底层的
LocalStreamEnvironment
使用相同的端口为每个
execute
调用创建一个新的
LocalFlinkMiniCluster
。这可能会导致问题。您正在尝试在同一本地群集上同时运行Flink作业吗?是的,我正在尝试在一个本地群集上运行多个作业。同时运行还是一个接一个地运行?同时运行这些作业将不起作用,因为
LocalFlinkMiniCluster
将仅以运行第一个作业所需的插槽数启动。不过,您可以做的是启动
LocalFlinkMiniCluster
,然后使用
RemoteStreamEnvironment
将作业提交到此集群。但是,请注意,要使所有作业同时运行,必须使用所需的插槽数启动集群。或者,也可以将所有作业合并为一个作业。然后操作员可以共享插槽。
StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();
DataStream stream = env.addSource(...);
...
stream.addSink(...);

StreamGraph streamGraph = env.getStreamGraph();
streamGraph.setJobName(name);
JobGraph jobGraph = streamGraph.getJobGraph();
exec.submitJobAndWait(jobGraph, true);