一、yarn

yarn框架

Flink on YARN   flink部署_客户端

yarn工作机制

Flink on YARN   flink部署_生产环境_02


yarn生产环境核参数配置


Flink on YARN   flink部署_flink_03

二、Flink部署模式

flink主要有三种部署模式:

  • 会话模式(Session Mode)
  • 单作业模式(Per-Job Mode)
  • 应用模式(Application Mode)

会话模式(Session Mode)

首先需要启动一个集群,建立并保持一个会话,在这个会话中通过客户端提交作业。优势:只需要一个集群,所有作业提交之后都进集群处理,集群的生命周期是超越作业上的,作业结束释放资源,集群继续运行。

缺点:因为资源是共享的,当资源不足时,提交新的作业会失败,另外,同一个taskmanager上可能运行了很多作业,如果其中一个发生故障导致taskmanager宕机,所有作业都将会受到影响。

总结:适合单个规模小,执行时间短的大量作业。


单作业模式(Per-Job Mode)

为了更好的隔离资源,为每个提交的作业启动一个集群由客户端运行应用程序,然后启动集群,作业被提交给 JobManager,进而分发给 TaskManager 执行。作业作业完成后,集群就会关闭,所有资源也会释放。这样一来,每个作业都有自己的jobmanager管理,占用独享的资源,即使发生故障,也不会影响其他作业。

总结:在生产环境中更加稳定,成为实际应用中的首选,但单作业模式一般需要借助一个资源管理框架来启动集群,Yarn,k8s等。


应用模式(Application Mode)

前两种模式应用代码都是在客户端运行,然后由客户端提交给jobmanager的,这种方式的弊端是:需要占用大量网络带宽,去下载依赖和把二进制数据发送给jobmanager,将会加重客户端资源消耗。

所以Application Mode的解决办法是:不需要客户端,直接把应用提交到jobmanager上运行,这意味着要为每个提交的应用单独启动一个jobmanager,也就是创建一个集群,jobmanager执行完自己的应用将会关闭。

三、Flink on YARN

yarn上的部署过程是 客户端把flink应用作业提交给yarn的ResourceManager,yarn的ResourceManager会向yarn的NodeManager申请容器。在这些容器上,flink会部署JobManager和TaskManager的实例,从而启动集群。Flink会根据运行在JobManager上的作业需要的slot数量动态分配TaskManager资源。

相关准备以及配置

1.配置环境变量

#配置HADOOP_CLASSPATH
export HADOOP_CLASSPATH=`hadoop classpath`

#配置YARN_CONF_DIR or HADOOP_CONF_DIR
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

2.启动hadoop集群

start-yarn.sh
start-dfs.sh

3.启动flink session

# ./bin/flink run -c 类名 -p 并行度 jar包
./bin/flink run -c com.atguigu.Report.RealTimeExample -p 1 ./Flinkquickstart.jar