Java Flink使用Yarn Client提交
在Flink中,Yarn是一种常用的资源管理框架,可以用于在集群上运行Flink作业。本文将介绍如何使用Yarn Client提交Java Flink作业,以及相关的代码示例。
什么是Yarn Client
Yarn是一个用于集群管理的开源框架,它可以有效地管理集群资源并运行作业。Yarn Client模式是一种在Yarn上运行作业的方式,它将作业的JAR包提交到Yarn集群,然后由客户端程序向Yarn提交作业请求。
使用Yarn Client提交Flink作业
首先,我们需要创建一个Flink作业,并将其打包成JAR文件。接下来,我们可以使用Yarn Client提交这个JAR文件到Yarn集群上运行。
package com.example.flinkjob;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.DataSet;
public class WordCount {
public static void main(String[] args) throws Exception {
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<String> text = env.fromElements(
"Hello Flink",
"Hello Yarn",
"Hello World"
);
DataSet<String> counts = text
.flatMap((String line, Collector<String> out) -> {
for (String word : line.split(" ")) {
out.collect(word);
}
})
.map((String word) -> new Tuple2<>(word, 1))
.groupBy(0)
.sum(1);
counts.print();
}
}
上面是一个简单的WordCount作业示例,它会统计输入文本中每个单词出现的次数。
接下来,我们可以使用以下代码来提交这个作业到Yarn集群上运行:
import org.apache.flink.client.program.PackagedProgram;
import org.apache.flink.client.program.PackagedProgramUtils;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.yarn.YarnClusterClient;
public class SubmitJobToYarn {
public static void main(String[] args) throws Exception {
String jarPath = "/path/to/WordCount.jar";
Configuration configuration = new Configuration();
PackagedProgram program = PackagedProgram.newBuilder()
.setJarFile(jarPath)
.setEntryPointClassName("com.example.flinkjob.WordCount")
.build();
YarnClusterClient yarnClient = new YarnClusterClient(configuration, 0);
yarnClient.setPrintStatusDuringExecution(true);
yarnClient.run(program, 1, true);
}
}
以上代码会将WordCount作业的JAR文件提交到Yarn集群上运行,并打印作业的执行状态。
序列图
下面是使用mermaid语法绘制的Yarn Client提交Flink作业的序列图:
sequenceDiagram
participant Client
participant YarnResourceManager
Client->>YarnResourceManager: 提交作业请求
YarnResourceManager-->>Client: 返回作业执行状态
类图
以下是WordCount作业中涉及的类的类图,使用mermaid语法绘制:
classDiagram
class WordCount {
-env: ExecutionEnvironment
+main(args: String[]): void
}
class PackagedProgram {
+PackagedProgram()
+setJarFile(jarFile: String): void
+setEntryPointClassName(className: String): void
+build(): PackagedProgram
}
class YarnClusterClient {
-configuration: Configuration
-printStatusDuringExecution: boolean
+run(program: PackagedProgram, parallelism: int, detached: boolean): void
}
结论
通过本文的介绍,我们了解了如何使用Yarn Client提交Java Flink作业。首先,我们创建了一个简单的WordCount作业,并将其打包成JAR文件。然后,我们使用Yarn Cluster Client提交这个JAR文件到Yarn集群上运行。最后,我们还使用mermaid语法绘制了Yarn Client提交作业的序列图和相关类的类图。希望本文能帮助读者更好地理解和使用Java Flink在Yarn上运行作业的过程。