Flink的提交/运行方式

本文详细介绍了Apache Flink的多种提交和运行方式,包括local、standalone和yarn模式,对比了它们的特点和应用场景,同时提供了flinkrun、yarn-session和flinkonyarn的具体操作指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flink的多种提交/运行方式

Flink具有多种提交方式,比如:常用的local模式,stantalone模式,yarn模式,k8s等。

这里主要对比local,stantalone,yarn三种提交方式。

  (1) Local 模式,JobManager 和 TaskManager 共用一个 JVM,只需要jdk支持,单节点运行,主要用来调试;

(2)stantalone模式,Flink是Master/Slave架构,充当Master角色的是JobManager,充当Slave角色是TaskManager。Flink也提供了Master HA的方案,是由Zookeeper支撑的;软件要求:

1.安装Java1.8或者更高版本

2.集群各个节点需要ssh免密登录

3.修改flink-conf.yaml配置文件

(3)Flink on Yarn(yarn session 和 flink run 两种模式)
session:这种方式需要先向yarn申请一块空间后,再提交作业,资源永远保持不变。如果资源满了,下一个作业就无法提交,只能等到yarn中的其中一个作业执行完成后,释放了资源,那下一个作业才会正常提交,这种方式资源被限制在session中;
flink run:一个任务会对应一个job,每提交一个作业会根据自身的情况,向yarn申请资源,直到作业执行完成,并不会影响下一个作业的正常运行。这种方式就需要确保集群资源足够。

一、本地(local)模式,仅开发使用

1.1 纯粹的local模式运行

这就是直接运行项目中的代码的方式提交:

public class TestLocal {
    public static void main(String[] args) throws Exception {

        // getExecutionEnvironment()方法可以根据flink运用程序如何提交判断出是那种模式提交,Local本地提交,Cluster标是standalone提交,Yarn提交好像是YarnCluster
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
        // ExecutionEnvironment env = ExecutionEnvironment.createLocalEnvironment();
        env.setParallelism(1); // 设置并行度为1

        env
                .readTextFile("D:\\code\\scalacode\\flinkstreamingreportforms\\pom.xml")
                .print();
    }
}
  •  

1.2 local使用remote的方式运行(不建议)

一般可以使用这种模式进行远程debug。如:

public class TestLocal {
    public static void main(String[] args) throws Exception {

        ExecutionEnvironment env = ExecutionEnvironment.createRemoteEnvironment("remote_ip", 8090, "D:\\code\\scalacode\\flinkstreamingreportforms\\target\\flink-streaming-report-forms-1.0-SNAPSHOT-jar-with-dependencies.jar");

        System.out.println(env.getParallelism());

        env
                .readTextFile("hdfs://remote_ip:9000/tmp/test.txt")
                .print();
    }
}

  • 上面提交给的我们的开发环境flink集群。在flink集群的web ui会存在Running Job/Compaleted Jobs的记录。

如:

image

1.3 本地提交到remote集群

项目代码:

public class TestLocal {
    public static void main(String[] args) throws Exception {
        // getExecutionEnvironment()方法可以根据flink运用程序如何提交判断出是那种模式提交,Local本地提交,Cluster标是standalone提交,Yarn提交好像是YarnCluster
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
        
        env
                .readTextFile("hdfs://remote_ip:9000/tmp/test.txt")
                .print();
    }
}

将项目打成jar包,将使用flink run 指定集群的模式提交(需要在local机器上,有flink提交命令)。如:

# -m flink 集群地址
# -p 配置job的并行度
# -c Job执行的main class
./flink.bat run -m remote_ip:8090 -p 1 -c com.test.TestLocal ../flink-streaming-report-forms-1.0-SNAPSHOT-jar-with-dependencies.jar
  • 执行结果也会在flink web ui界面显示结果:

image


二、standalone

上面讲了flink在local机器上进行提交,需要指定flink的master信息。

standalone模式提交也是类似,不过可以不用指定master节点,还有个区别就是,提交是在flink集群的机器节点上。

可能有人问,在local机器上提交与flink机器节点上提交有啥区别?

区别不太,主要是,提交后,会有一些log信息输出,这些信息在哪里记录或展示,还有就是程序最后会收集结果collect,最后的收集结果也就在对应提交的机器上。

下面介绍flink的前台运行与后台运行,以及常用参数:

以下均已1.3打出来的jar作为测试。

2.1 flink run 前台运行

/opt/flink/bin/flink run -p 1 -c com.test.TestLocal ./flink-streaming-report-forms-1.0-SNAPSHOT-jar-with-dependencies.jar
  • 1

输出结果:

image

2.2 flink run 后台运行

因1.3代码是直接print出来,使用后台模式会报错,这边修改代码,直接写入hdfs,再使用后台模式提交。

# 通过 -d 表示后台执行
/opt/flink/bin/flink run -p 1 -c com.test.TestLocal -d ./flink-streaming-report-forms-1.0-SNAPSHOT-jar-with-dependencies.jar 
  •  

执行结果:

image

2.3 flink run 命令常用的参数:

flink run命令参数如下:

flink run命令执行模板:flink run [option] <jar-file> <arguments>

-c,--class <classname> : 需要指定的main方法的类

-C,--classpath <url> : 向每个用户代码添加url,他是通过UrlClassLoader加载。url需要指定文件的schema如(file://)

-d,--detached : 在后台运行

-p,--parallelism <parallelism> : job需要指定env的并行度,这个一般都需要设置。

-q,--sysoutLogging : 禁止logging输出作为标准输出。

-s,--fromSavepoint <savepointPath> : 基于savepoint保存下来的路径,进行恢复。

-sas,--shutdownOnAttachedExit : 如果是前台的方式提交,当客户端中断,集群执行的job任务也会shutdown。

  •  

三、flink on yarn

flink on yarn提交有2种方式,第一种是yarn-session,一种是flink run -m yarn-cluster。下面分别介绍2种方式的用法。

3.1 yarn-session

yarn-session提交的方式有3步:

第一步:分配资源,生成application_id

yarn-session -jm 1024m -nm flinkOnYarnTest -s 1 -tm 1024m -d

第二步:yarn-session依附application_id

yarn-session -id/--applicationId <application_id>

第三步:flink 提交job

flink run -c classname <jar> <arguments>

下面是yarn-session的命令行参数

[外链图片转存失败(img-0hyI6BGC-1563439836748)(https://raw.githubusercontent.com/zhang3550545/image_center/master/image-2019/flink-run-07.png)]

3.2 flink run -m yarn-cluster

flink run -m yarn-cluster 实际上和上面提交standalone的方式一样。不过对于yarn的资源的命令参数有区别,如下:

# -m/--jobmanager : yarn-cluster集群
# -yd/--yarndetached : 后台
# -yjm/--yarnjobManager : jobmanager的内存
# -ytm/--yarntaskManager : taskmanager的内存
# -yid/--yarnapplicationId : job依附的applicationId
# -ynm/--yarnname : application的名称
# -ys/--yarnslots : 分配的slots个数

flink run -m yarn-cluster -yd -yjm 1024m -ytm 1024m -ynm <name> -ys 1 <jar> <arguments>

image


flink的其他命令

1.flink list

flink list:列出flink的job列表。

flink list -r/--runing :列出正在运行的job

flink list -s/--scheduled :列出已调度完成的job

2.flink cancel

flink cancel [options] <job_id> : 取消正在运行的job id

flink cancel -s/--withSavepoint <path> <job_id> : 取消正在运行的job,并保存到相应的保存点

3.flink stop:仅仅针对Streaming job

flink stop [options] <job_id>

flink stop <job_id>:停止对应的job

4.flink modify

flink modify <job_id> [options] 

flink modify <job_id> -p/--parallelism p : 修改job的并行度

5.flink savepoint(重要)

flink savepoint [options] <job_id> <target directory>

eg:

# 触发保存点
flink savepoint <job_id> <hdfs://xxxx/xx/x> : 将flink的快照保存到hdfs目录

# 使用yarn触发保存点
flink savepoint <job_id> <target_directory> -yid <application_id>

# 使用savepoint取消作业
flink cancel -s <tar_directory> <job_id>



# 从保存点恢复
flink run -s <target_directoey> [:runArgs]

# 如果复原的程序,对逻辑做了修改,比如删除了算子可以指定allowNonRestoredState参数复原。
flink run -s <target_directory> -n/--allowNonRestoredState [:runArgs]
<think>嗯,用户问的是在Flink中如何查看Web UI或者测试Flink是否成功运行。首先,我需要回忆一下Flink的基本架构和启动流程。当用户运行start-cluster.sh脚本时,会启动Standalone模式的集群,包括JobManager和TaskManager。接下来,用户想知道如何访问Web UI以及如何测试集群是否正常工作。 首先,关于Web UI的访问,默认情况下Flink的Web UI端口是8081,所以用户应该可以通过master节点的IP或主机名加上这个端口访问,比如http://master:8081。不过,可能需要确认用户的环境是否有防火墙设置或者端口是否被占用,如果有问题可能需要检查这些方面。 然后,测试Flink是否运行成功的方法有几个。一个常见的方法是提交一个示例作业,比如自带的WordCount程序。用户可以通过运行./bin/flink run examples/streaming/WordCount.jar来提交作业,然后在Web UI中查看作业是否正常运行。此外,检查日志文件也是一个好方法,JobManager和TaskManager的日志通常会输出到log目录下,查看是否有错误信息。 另外,用户可能在执行start-cluster.sh时遇到了问题,比如启动失败或者端口被占用。这时候需要引导用户检查进程是否真的启动成功,可以使用jps命令查看是否有StandaloneSessionClusterEntrypoint和TaskManagerRunner进程存在。如果没有,可能需要检查日志中的错误信息。 还有可能用户的环境变量配置有问题,比如JAVA_HOME是否设置正确,或者Flink的配置文件中指定的端口是否被其他应用占用。这时候需要用户检查conf/flink-conf.yaml中的配置,尤其是rest.port和jobmanager.rpc.address等参数。 另外,用户可能对Flink的基础操作不太熟悉,所以需要详细说明每一步的具体操作,比如如何提交作业,如何查看日志,如何停止集群等。同时,提醒用户如果遇到问题,可以查看官方文档或者社区资源,获取更多帮助。 总结下来,回答需要分步骤说明如何访问Web UI,如何通过提交示例作业测试集群,以及如何检查日志和进程状态。同时,要包含常见问题的排查方法,比如端口冲突、配置错误等,帮助用户全面理解和解决问题。</think>以下分步骤说明如何验证Flink集群启动及访问WebUI: ----- **一、访问WebUI** 1. 默认端口访问:浏览器输入 `http://master:8081`(master替换为实际IP) - ✔️ 成功标志:显示Flink Dashboard,可见TaskManager数量及资源状态 - ❌ 失败处理:检查`conf/flink-conf.yaml`中`rest.port`配置,确认防火墙是否放行端口 **二、功能验证方法** 1. 提交测试作业: ```bash # 进入Flink安装目录 cd ~/software/flink # 运行WordCount示例 ./bin/flink run ./examples/streaming/WordCount.jar ``` - ✔️ 成功标志:控制台输出词频统计结果,WebUI的"Running Jobs"显示作业运行 2. 进程检查: ```bash jps | grep -E 'TaskManagerRunner|StandaloneSessionClusterEntrypoint' ``` - 应显示2个进程:JobManager和TaskManager 3. 日志检查: ```bash tail -100f log/flink-*-standalonesession-*.log # JobManager日志 tail -100f log/flink-*-taskexecutor-*.log # TaskManager日志 ``` **三、常见问题排查** 1. 端口冲突: - 修改`conf/flink-conf.yaml`中`rest.port`后重启集群 2. 启动失败: - 检查JAVA_HOME是否配置 - 确认`conf/masters`和`conf/workers`文件配置正确 **四、集群管理命令** ```bash # 停止集群 ./bin/stop-cluster.sh # 单独启停组件 ./bin/jobmanager.sh start|stop ./bin/taskmanager.sh start|stop ``` ----- **补充说明**:若WebUI无法访问,可通过`curl http://localhost:8081`进行本机端口连通性测试。建议首次部署时使用`nc -vz master 8081`验证网络可达性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值