![](/img/trans.png)
[英]How to submit spark job from within java program to standalone spark cluster without using spark-submit?
[英]How do I submit a job to a Flink cluster using Java code?
我已经将一个包含我的应用程序代码的 fat jar 上传到我的 Flink 集群中所有节点的 /lib 文件夹。 我正在尝试从单独的 Java 应用程序启动 Flink 作业,但找不到这样做的好方法。
我目前找到的最接近解决方案的是 Monitoring Rest API,它有一个运行作业 API 。 但是,这仅允许您运行通过作业上传功能提交的作业。
我在 flink-client 模块中看到了ClusterClient.java ,但看不到任何关于如何使用它的示例。
任何有关某人如何通过 java 代码成功提交作业的示例将不胜感激!
您可以使用RestClusterClient
运行指向您的 Flink 作业的PackagedProgram
。 如果你的工作接受一些参数,你可以传递它们。
以下是在localhost:8081
上运行的独立集群的示例:
// import org.apache.flink.api.common.JobSubmissionResult;
// import org.apache.flink.client.deployment.StandaloneClusterId;
// import org.apache.flink.client.program.PackagedProgram;
// import org.apache.flink.client.program.rest.RestClusterClient;
// import org.apache.flink.configuration.Configuration;
// import org.apache.flink.configuration.JobManagerOptions;
// import org.apache.flink.configuration.RestOptions;
String clusterHost = "localhost";
int clusterPort = 8081;
Configuration config = new Configuration();
config.setString(JobManagerOptions.ADDRESS, clusterHost);
config.setInteger(RestOptions.PORT, clusterPort);
String jarFilePath = "/opt/flink/examples/streaming/SocketWindowWordCount.jar";
String[] args = new String[]{ "--port", "9000" };
PackagedProgram packagedProgram = new PackagedProgram(new File(jarFilePath), args);
RestClusterClient<StandaloneClusterId> client =
new RestClusterClient<StandaloneClusterId>(config, StandaloneClusterId.getInstance());
int parallelism = 1;
JobSubmissionResult result = client.run(packagedProgram, parallelism);
这似乎适用于 1.10 版
private static final int PARALLELISM = 8;
private static final Configuration FLINK_CONFIG = new Configuration();
void foo() throws Exception {
FLINK_CONFIG.setString(JobManagerOptions.ADDRESS, "localhost");
FLINK_CONFIG.setInteger(RestOptions.PORT, 8081);
FLINK_CONFIG.setInteger(RestOptions.RETRY_MAX_ATTEMPTS, 3);
RestClusterClient<StandaloneClusterId> flinkClient = new RestClusterClient<>(FLINK_CONFIG, StandaloneClusterId.getInstance());
String jar = "/path/to/jar";
String[] args = new String[]{"..."};
PackagedProgram program = PackagedProgram.newBuilder()
.setJarFile(new File(jar))
.setArguments(args)
.build();
JobGraph jobGraph = PackagedProgramUtils.createJobGraph(program, FLINK_CONFIG, PARALLELISM, false);
JobID jobId = flinkClient.submitJob(jobGraph).get();
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.