![](/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.