文章目录
1.Flink多种提交方式对比
常用提交方式分为local,standalone,yarn三种。
- local:本地提交项目,可纯粹的在本地单节点运行,也可以将本地代码提交到远端flink集群运行。
- standalone:flink集群自己完成资源调度,不依赖于其他资源调度器,需要手动启动flink集群。
- yarn:依赖于hadoop yarn资源调度器,由yarn负责资源调度,不需要手动启动flink集群。需要先启动yarn和hdfs。又分为yarn-session和yarn-cluster两种方式。提交Flink任务时,所在机器必须要至少设置环境变量
YARN_CONF_DIR
、HADOOP_CONF_DIR
、HADOOP_CONF_PATH
中的一个,才能读取YARN和HDFS的配置信息(会按三者从左到右的顺序读取,只要发现一个就开始读取。如果没有正确设置,会尝试使用HADOOP_HOME/etc/hadoop
),否则提交任务会失败。
1.1 local模式
local即本地模式,可以不依赖hadoop,可以不搭建flink集群。一般在开发时调试时使用。
1.1.1 纯粹的local模式运行
就是直接运行项目中的代码的方式,例如直接在idea中运行。创建ExecutionEnvironment的方式如下:
// getExecutionEnvironment()方法可以根据flink运用程序如何提交判断出是那种模式提交
//ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
ExecutionEnvironment env = ExecutionEnvironment.createLocalEnvironment();
1.1.2 local使用remote的方式运行
这种方式可以将本地代码提交给远端flink集群运行,需要指定集群的master地址。在flink集群的web ui会存在Running Job/Compaleted Jobs的记录。
public class TestLocal {
public static void main(String[] args) throws Exception {
ExecutionEnvironment env = ExecutionEnvironment.createRemoteEnvironment("remote_ip", 8090, "D:\\code\\flink-local.jar");
System.out.println(env.getParallelism());
env.readTextFile("hdfs://remote_ip:9000/tmp/test.txt")
.print();
}
}
1.1.3 本地提交到remote集群
例如有如下项目代码:
public class TestLocal {
public static void main(String[] args) throws Exception {
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
env.readTextFile("hdfs://remote_ip:9000/tmp/test.txt")
.print();
}
}
将项目打成jar包,在本机上使用flink run 指定集群的模式提交(这个机器可以不是flink集群的节点,但需要在local机器上有flink提交命令,)。如:
./flink run -m remote_ip:8090 -p 1 -c com.test.TestLocal /home/hdp/flink-local.jar
# -m flink 集群地址
# -p 配置job的并行度
# -c Job执行的main class
也会在flink web ui界面显示结果。
1.2 standalone模式
上面讲了flink在local机器上进行提交,需要指定flink的master信息。
standalone模式提交也是类似,不过可以不用指定master节点,还有个区别就是,提交是在flink集群的机器节点上。
两个提交命令示例:
# 前台提交
./flink run -p 1 -c com.test