Flink on yarn集群搭建

前面一篇博客中已经搭建了flink Standalone的集群,须要的能够进去看一下,今天主要来讲一下flink on yarn 集群的搭建以及怎么提交任务.这篇博客写的比较详细,内容较多,但愿你们耐心看完,干货满满javascript

版本信息:

flink-1.6.0java

zookeeper-3.4.10web

hadoop-2.9.0json

zk和hadoop集群的搭建,今天这里就不说了,主要说一下flink的.session

(1). vi flink-conf.yaml (里面具体的参数大小能够根据本身的机器实际状况而定)我配置的比较简单.app

env.java.home: /home/jason/bigdata/jdk/jdk1.8.0_11
jobmanager.rpc.address: master
taskmanager.heap.size: 4096
taskmanager.numberOfTaskSlots: 4
#parallelism.default: 8
taskmanager.tmp.dirs: /tmp
jobmanager.heap.size: 1024
jobmanager.web.port: 8085
jobmanager.rpc.port: 6123
state.backend: filesystem
state.backend.fs.checkpointdir: hdfs:///flink/checkpoints
#taskmanager.network.numberOfBuffers: 64000
fs.hdfs.hadoopconf: /home/jason/bigdata/hadoop/hadoop-2.9.0/etc/hadoop
recovery.mode: zookeeper
recovery.zookeeper.quorum: master:2181,storm1:2181,storm2:2181
recovery.zookeeper.storageDir: hdfs:///flink/recovery
recovery.zookeeper.path.root: /flinkOnYarn
recovery.zookeeper.path.namespace: /cluster_yarn
yarn.application-attempts: 4
akka.watch.heartbeat.interval: 5 s
akka.watch.heartbeat.pause: 20 s
akka.ask.timeout: 60 s
akka.framesize: 20971520b

注意冒号后面必定要有空格oop

(2).vi masters (这个里面写主节点和端口号)ui

master:8082

(3).vi slaves (把全部的子节点都写上)spa

storm1
storm2

(4).scp -r flink root@storm1:/home/jason/bigdata/,scp -r flink root@storm1:/home/jason/bigdata/ (把flink文件夹复杂到子节点).net

(5).接下来就能够启动flink集群了,这里特别说明一下flink on yarn的启动模式

Flink on Yarn

   Flink提供了两种yarn的部署方式:

1.Start a long-running Flink cluster on YARN
    经过命令yarn-session.sh来实现,本质上是在yarn集群上启动一个flink集群。
由yarn预先给flink集群分配若干个container给flink使用,在yarn的界面上只能看到一个Flink session with X TaskManagers的任务。只有一个Flink界面,能够从Yarn的ApplicationMaster连接进入。使用bin/flink run命令发布任务时,本质上是使用Flink自带的调度,与普通的在Flink集群上发布任务并无不一样。不一样的任务可能在一个TaskManager中,也便是在一个JVM进程中,没法实现资源隔离。

2.Run a Flink job on YARN
    经过命令bin/flink run -m yarn-cluster实现,一次只发布一个任务,本质上给每一个flink任务启动了一个集群。yarn不事先给flink分配container,而是在任务发布时,启动JobManager(对应Yarn的AM)和TaskManager,若是一个任务指定了n个TaksManager(-yn n),则会启动n+1个Container,其中一个是JobManager。发布m个应用,则有m个Flink界面,对比方式一,一样发布m个应用,会多出m-1个JobManager的。发布任务时,其实是使用了Yarn的调用。不一样的任务不可能在一个Container(JVM)中,也便是实现了资源隔离。

启动yarn-session的参数解释以下:

-n(--container)	taskmanager的数量	 
-s(--slots)	用启动应用所需的slot数量/ -s 的值向上取整,有时能够多一些taskmanager,作冗余 每一个taskmanager的slot数量,默认一个slot一个core,默认每一个taskmanager的slot的个数为1	6~10
-jm	jobmanager的内存(单位MB)	3072
-tm	每一个taskmanager的内存(单位MB)根据core 与内存的比例来设置,-s的值* (core与内存的比)来算
-nm	yarn 的appName(如今yarn的ui上的名字)|	 
-d	后台执行

启动flink应用的参数解释以下

-j	运行flink 应用的jar所在的目录
-a	运行flink 应用的主方法的参数
-p	运行flink应用的并行度
-c	运行flink应用的主类, 能够经过在打包设置主类
-nm	flink 应用名字,在flink-ui 上面展现
-d	后台执行
--fromsavepoint	flink 应用启动的状态恢复点

接下来咱们分别启动这两种模式看一下效果:

先启动yarn-session模式:

命令:./yarn-session.sh -n 8 -jm 1024 -tm 1024 -s 4 -nm FlinkOnYarnSession -d,表示启动8个TaskManager,每一个内存为1G,slots数为4个的Flink集群。以下图因此:

能够看到会在yarn上启动一个长期运行的程序,除非手动杀死,是不会停的,其实这个能够理解为咱们启动了一个很大的容器,而后能够在这个容器里面提交多个任务.

而后咱们提交一个job上去,

命令:./flink run -c flink.flinkStreaming /home/jason/bigdata/jar/bj_parse_json-1.0-SNAPSHOT.jar 

点开Tracking UI中的ApplicationMaster,能够看到Flink的页面,以下图所示:

这里须要注意一下若是没有提交job,只启动yarn-session的话,打开flink的ui界面是看不到上面箭头所指的资源数的.只有提交一个job后,才会显示.上图是我提交了一个job,固然还能够提交多个job到这个容器中运行.这种方式没有实现资源的隔离.

Flink页面中能看到目前只启动了一个TaskMananger(一个JVM进程),而且有FreeSlot,新启动的Flink Job会在这些slots中启动,直到没有更多FreeSlots了才会分配新的TaskMananger。

单个任务模式

提交命令:./flink run -m yarn-cluster -yn 1 -yjm 1024 -ytm 1024 /home/jason/bigdata/bj_parse_json-1.0-SNAPSHOT.jar

./flink run -m yarn-cluster -c flink.flinkStreamingJason -yn 2 -ys 4  -yjm 1024 -ytm 1024 /home/jason/bigdata/jar/bj_parse_json-1.0-SNAPSHOT.jar &

能够看到yarn上面显示两个job点进入看flink的ui界面以下:

这个地方还有点问题,理论上应该显示两个TaskMananger才对,可是我jps看进程是有两个YarnSessionClusterEntrypoint的,还须要查找一下缘由.这种方式实现了资源的隔离.

slots数的指定:对于standalone cluster而言,因为一台机器上只有一个TaskManager,slots数应与机器核数相同。对于single job on yarn模式和yarn cluster模式而言,一台机器上可能有多个TaskManager(取决于yarn在该机器上分配的container数),理论上应该与该Container分配的核数一致为佳。
Flink命令执行后,在任务执行完以前不会返回,控制台是不能退出的。能够在命令后加-d 参数,表示detached,但此时没法再经过flink命令结束任务,须要经过yarn命令yarn application -kill < appId > 结束任务。

Flink的web ui使用能够看这里,http://www.javashuo.com/article/p-tidkloug-gg.html

先写到这里吧,下班了

若是有写的不对的地方,欢迎你们指正,若是有什么疑问,能够加QQ群:340297350,更多的Flink和spark的干货能够加入下面的星球