Flink可以通过Java代码将多个作业连接到使用Web Ui的Stream本地环境吗?

时间:2017-05-09 13:39:14

标签: java apache-flink flink-streaming bigdata

Flink可以通过Java代码将多个作业附加到使用Web Ui的Stream本地环境吗?

我的代码就像这样

env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(config); 
env.addSource(...); 
env.addSink(...); 
env.execute("stream job1"); 

我想要做的是遍历这个并将job2 job3附加到web ui管理的相同环境中。如何在java代码中完成?

我尝试使用env2 = StreamExecutionEnvironment.getExecutionEnvironment(),  但似乎新职位2并不适合我之前创建的环境。

请提前帮助我

2 个答案:

答案 0 :(得分:1)

您应该可以重复使用StreamExecutionEnvironment中存储的已创建env

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

答案 1 :(得分:1)

似乎有效(单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 env = StreamExecutionEnvironment.createLocalEnvironment();
DataStream stream = env.addSource(...);
...
stream.addSink(...);

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

注意StreamExecutionEnvironment仅用于生成JobGraphLocalFlinkMiniCluster是执行的地方。

在最后一行,可以选择是否等待工作(submitJobDetached)。