目录

1、说明

2、初始化 执行环境对象

2.1 getExecutionEnvironment(推荐)

2.2 createLocalEnvironment (本地环境对象)

2.3  createRemoteEnvironment (远程环境对象)

2.4 createLocalEnvironmentWithWebUI (本地环境+Web监控UI)

3、代码示例


1、说明

Flink计算任务是用`特定的语言(java、scala、python、sql)`,根据业务需求编写的代码

最终需要将编写好的代码发送到可运行的环境中,计算出所需要的结果

Flink计算任务支持在多种环境中运行:

        集群环境:Yarn、Standalone、K8s

        本地环境(调试使用)

这就需要提交Flink计算任务时,为其找到一个`合适`的执行环境对象

flink获取jobName_flink


2、初始化 执行环境对象

2.1 getExecutionEnvironment(推荐)

语法:

通过 配置文件对象 自动获取相适应 的 执行环境对象
           如果在IDE中执行 或者 作为一般的java程序执行 ,则返回 本地执行环境
           如果你将 jar包提交到集群, 则返回 集群执行环境

public static StreamExecutionEnvironment getExecutionEnvironment() {
     return getExecutionEnvironment(new Configuration());
 }

2.2 createLocalEnvironment (本地环境对象)

语法:

创建 本地执行环境对象
tips:
       1. 在本地的JVM中 以多线程的方式执行flink计算任务
       2. 不指定并行度时,用当前机器CPU核数作为并行度


2.3  createRemoteEnvironment (远程环境对象)

语法:

创建 远程执行环境对象
tips:
    1.不指定并行度时,将使用 flink-conf.yaml 设置的并行度 parallelism.default=1


2.4 createLocalEnvironmentWithWebUI (本地环境+Web监控UI)

说明:

这种方式在IDE开发测试时,常用

flink获取jobName_并行度_02


3、代码示例

开发语言:Java1.8

Flink版本:1.17.0

package com.baidu.datastream.env;

import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.environment.LocalStreamEnvironment;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

/*
 * TODO 思考:flink的计算任务(flink application) 可以在那些环境运行呢?
 *      1.集群环境:yarn、Standalone、K8s
 *      2.本地环境:本地的JVM中
 * */

public class ExecutionEnvironment {
    public static void main(String[] args) throws Exception {
        // 方式1
        //getExecutionEnvironment();
        // 方式2
        //createLocalEnvironment();
        // 方式3
        //createRemoteEnvironment();
        // 方式4
        createLocalEnvironmentWithWebUI();
    }

    // 方式1(推荐): getExecutionEnvironment 方法
    public static void getExecutionEnvironment() {
        /*
         * TODO 根据运行的上下文(配置文件),来判断当前运行环境
         *     如果在IDE中执行 或者 作为一般的java程序执行 ,则返回 本地执行环境
         *     如果你将 jar包提交到集群, 则返回 集群执行环境
         *
         * */
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        System.out.println("并行度: " + env.getParallelism());
    }

    // 方式2(不推荐): createLocalEnvironment 方法
    public static void createLocalEnvironment() {
        /*
         * TODO 返回本地执行环境
         * */
        LocalStreamEnvironment localEnv = StreamExecutionEnvironment.createLocalEnvironment();
        System.out.println("并行度: " + localEnv.getParallelism());
    }

    // 方式3(不推荐): createRemoteEnvironment 方法
    public static void createRemoteEnvironment() {
        /*
         * TODO 返回集群执行环境
         * */
        StreamExecutionEnvironment remoteEnv = StreamExecutionEnvironment.createRemoteEnvironment(
                "localhost"
                , 8081
                , 8
                , "../FlinkAPI/target/FlinkAPI-1.0-SNAPSHOT.jar"
        );
        System.out.println("并行度: " + remoteEnv.getParallelism());
    }

    // 方式4(推荐):createLocalEnvironmentWithWebUI
    public static void createLocalEnvironmentWithWebUI() throws Exception {
        /*
         * TODO 根据运行的上下文(配置文件),来判断当前运行环境
         *     如果在IDE中执行 或者 作为一般的java程序执行 ,则返回 本地执行环境
         *     如果你将 jar包提交到集群, 则返回 集群执行环境
         *
         * */
        Configuration configuration = new Configuration();
        StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(configuration);
        // 2.将socket作为数据源(开启socket端口: nc -lk 9999)
        env.socketTextStream("localhost", 9999).print();


        // 3.触发程序执行
        env.execute();
    }

}