Quantcast
Channel: CodeSection,代码区,数据库(综合) - CodeSec
Viewing all articles
Browse latest Browse all 6262

Flink On Yarn Resource Isolation

$
0
0
Flink On Yarn Resource Isolation 解决问题

Flink目前没有资源隔离,不同任务的task可能跑在同一个JVM进程中,无法进行资源隔离,一个应用出问题,容易导致集群全部挂掉。

Flink on Yarn

Flink提供两种Yarn的部署方式 Yarn Setup :

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进程中,无法实现资源隔离。

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)中,也即是实现了资源隔离。 Example

假设已经搭建好了yarn和hdfs集群。Flink目录放在yarn集群的某台机器上,最好是ResourceManager。该机器必须配置有YARN_CONF_DIR 或HADOOP_CONF_DIR环境变量,且Flink能访问。

集群模式 命令:./bin/yarn-session.sh -n 10 -tm 8192 -s 8,表示启动10个TaskManager,每个内存为8G,slots数为8个的Flink集群。
Flink On Yarn Resource Isolation
点开Tracking UI中的ApplicationMaster,可以看到Flink的页面。
Flink On Yarn Resource Isolation
Flink页面中能看到目前只启动了一个TaskMananger(一个JVM进程),并且有FreeSlot,新启动的Flink Job会在这些slots中启动,直到没有更多FreeSlots了才会分配新的TaskMananger。 运行两个命令: ./bin/flink run ./examples/streaming/SocketWindowWordCount.jar port 12345 和 ./bin/flink run ./examples/streaming/SocketWindowWordCount.jar port 1234 启动两个flink任务(需要预先启动nc -l 12345和nc -l 1234才能正常运行),截图如下:
Flink On Yarn Resource Isolation
可以看到是在同一个JVM进程中运行的, 没有资源隔离。 单个任务模式 命令 ./bin/flink run -m yarn-cluster -yn 2 -ys 4 ./examples/streaming/SocketWindowWordCount.jar port 12345 和 ./bin/flink run -m yarn-cluster -yn 2 -ys 2 ./examples/streaming/SocketWindowWordCount.jar port 1234 分别表示以yarn-cluster模式,启动了两个flink任务,第一个使用了2个container,每个container 4个slots,第二个使用了2个container,每个container 2个slots
Flink On Yarn Resource Isolation
Yarn中能看到两个任务,分别有两个ApplicationMaster,对应Flink的JobMananger。
Flink On Yarn Resource Isolation
Flink On Yarn Resource Isolation
可以看到两个Flink集群中,均没有Free Slots,所有的资源仅提供给当前任务运行。使用jps查看进程也能看到集群上共有2个ApplicationMaster和4个TaskMananger。 实现了资源隔离。 其他 slots数的指定:对于standalone cluster而言,由于一台机器上只有一个TaskManager,slots数应与机器核数相同。对于single job on yarn模式和yarn cluster模式而言,一台机器上可能有多个TaskManager(取决于yarn在该机器上分配的container数),理论上应该与该Container分配的核数一致为佳。 Flink命令执行后,在任务执行完之前不会返回,控制台是不能退出的。可以在命令后加-d 参数,表示 detached ,但此时无法再通过flink命令结束任务,需要通过yarn命令 yarn application -kill < appId > 结束任务。

Viewing all articles
Browse latest Browse all 6262

Trending Articles