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上运行作业的过程。