Flink on Yarn(yarn session 和 flink run 两种模式)
session:这种方式需要先向yarn申请一块空间后,再提交作业,资源永远保持不变。如果资源满了,下一个作业就无法提交,只能等到yarn中的其中一个作业执行完成后,释放了资源,那下一个作业才会正常提交,这种方式资源被限制在session中,不能超过。
flink run:一个任务会对应一个job,每提交一个作业会根据自身的情况,向yarn申请资源,直到作业执行完成,并不会影响下一个作业的正常运行。这种方式就需要确保集群资源足够。
Flink on Yarn的两种运行方式
第一种【yarn-session.sh(开辟资源)+flink run(提交任务)】
•启动一个一直运行的flink集群
•./bin/yarn-session.sh -n 2 -jm 1024 -tm 1024 [-d]
•附着到一个已存在的flink yarn session
•./bin/yarn-session.sh -id application_1463870264508_0001
•执行任务
•./bin/flink run ./data/batch/WordCount.jar -input hdfs://hadoop00:9000/LICENSE -output hdfs://hadoop00:9000/wordcount-result.txt
•停止任务 【web界面或者命令行执行cancel命令】
第二种【flink run -m yarn-cluster(开辟资源+提交任务)】
•启动集群,执行任务
•./bin/flink run -m yarn-cluster -yn 2 -yjm 1024 -ytm 1024 ./data/batch/WordCount.jar
注意:client端必须要设置YARN_CONF_DIR或者HADOOP_CONF_DIR或者HADOOP_HOME环境变量,通过这个环境变量来读取YARN和HDFS的配置信息,否则启动会失败
./bin/yarn-session.sh 命令分析
用法:
必选
-n,--container <arg> 分配多少个yarn容器 (=taskmanager的数量)
可选
-D <arg> 动态属性
-d,--detached 独立运行
-jm,--jobManagerMemory <arg> JobManager的内存 [in MB]
-nm,--name 在YARN上为一个自定义的应用设置一个名字
-q,--query 显示yarn中可用的资源 (内存, cpu核数)
-qu,--queue <arg> 指定YARN队列.
-s,--slots <arg> 每个TaskManager使用的slots数量
-tm,--taskManagerMemory <arg> 每个TaskManager的内存 [in MB]
-z,--zookeeperNamespace <arg> 针对HA模式在zookeeper上创建NameSpace
-id,--applicationId <yarnAppId> YARN集群上的任务id,附着到一个后台运行的yarn session中
./bin/flink run 命令分析
run [OPTIONS] <jar-file> <arguments>
• "run" 操作参数:
•-c,--class <classname> 如果没有在jar包中指定入口类,则需要在这里通过这个参数指定
•-m,--jobmanager <host:port> 指定需要连接的jobmanager(主节点)地址,使用这个参数可以指定一个不同于配置文件中的jobmanager
•-p,--parallelism <parallelism> 指定程序的并行度。可以覆盖配置文件中的默认值。
默认查找当前yarn集群中已有的yarn-session信息中的jobmanager【/tmp/.yarn-properties-root】:
•./bin/flink run ./data/batch/WordCount.jar -input hdfs://hostname:port/hello.txt -output hdfs://hostname:port/result1
连接指定host和port的jobmanager:
•./bin/flink run -m hadoop00:1234 ./data/batch/WordCount.jar -input hdfs://hostname:port/hello.txt -output hdfs://hostname:port/result1
启动一个新的yarn-session:
•./bin/flink run -m yarn-cluster -yn 2 ./data/batch/WordCount.jar -input hdfs://hostname:port/hello.txt -output hdfs://hostname:port/result1
•注意:yarn session命令行的选项也可以使用./bin/flink 工具获得。它们都有一个y或者yarn的前缀
•例如:./bin/flink run -m yarn-cluster -yn 2 ./data/batch/WordCount.jar
Flink 在yarn上的分布
Flink on Yarn
•ResourceManager
•NodeManager
•AppMater(jobmanager和它运行在一个Container中)
•Container(taskmanager运行在上面)
使用on-yarn的好处
•提高集群机器的利用率
•一套集群,可以执行MR任务,spark任务,flink任务等...
JobManager 高可用(HA)
1、说明
jobManager协调每个flink任务部署。它负责任务调度和资源管理。默认情况下,每个flink集群只有一个JobManager,这将导致一个单点故障(SPOF):如果JobManager挂了,则不能提交新的任务,并且运行中的程序也会失败。使用JobManager HA,集群可以从JobManager故障中恢复,从而避免SPOF(单点故障) 。 用户可以在standalone或 YARN集群 模式下,配置集群高可用
2、配置步骤
Standalone集群的高可用
•Standalone模式(独立模式)下JobManager的高可用性的基本思想是,任何时候都有一个 Master JobManager ,并且多个Standby JobManagers 。 Standby JobManagers可以在Master JobManager 挂掉的情况下接管集群成为Master JobManager。 这样保证了没有单点故障,一旦某一个Standby JobManager接管集群,程序就可以继续运行。 Standby JobManager和Master JobManager实例之间没有明确区别。 每个JobManager都可以成为Master或Standby节点
Yarn 集群高可用
•flink on yarn的HA 其实主要是利用yarn自己的job恢复机制
HA机制详细配置步骤见下篇博客