IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Flink实时数仓之任务部署模式 -> 正文阅读

[大数据]Flink实时数仓之任务部署模式


标题: Flink实时数仓之任务部署模式
时间: 2021-07-24 09:10:16
标签: [Flink,实时数仓]
分类: 实时数仓

大家好,我是Lee,最近在研究Flink任务的远程提交,所以需要了解它能不能实现远程提交,怎么提交,有哪几种模式运行flink实时任务,今天给你们介绍一下。且看下文。
why_flink

不同的模式,主要区别就在于集群的生命周期和任务的资源调度上。还有就是任务的main方法是在client上还是cluster上执行的。
deployment_mode

1.local cluster
就是在你搭建的flink集群上执行flink run,没有指定-m(mode)参数,即为local模式,该模式方便调试,开发时使用方便,在flink web ui端可以查看到相应的任务。

2.application mode
应用的main方法执行在cluster端。
main方法执行在client的话,有一个坏处就是,启动时,需要从集群中下载所有的依赖到client端,抽出程序的执行图JobGraph,然后将依赖项和JobGraph发送到集群中其他机器,这样对client机器的网络带宽和cpu有很大的一个资源压力,在客户端被许多用户共享使用时,这个问题会更加明显。application mode的main方法执行在cluster端。就没有这个问题。

另外,application mode为每个提交的应用分别创建一个cluster,main()方法在Jobmanager端执行,为每一个应用创建一个cluster可以被看作是创建一个仅在特定程序的作业之间共享的会话集群,当应用结束后,即销毁cluster资源。

在这种架构模式下,拥有per-job模式的资源隔离优势。并且main()方法执行在jobmanager中,可以节约cpu和带宽。

相比于per-job模式,application mode模式允许提交的应用中包含多个作业,作业的执行顺序不受部署模式的影响,而是受调用的先后顺序,使用execute()是阻塞的,第一个启动的作业必须结束后才能启动第二个作业。executeAsync()是非阻塞的,这样第二个job可以在第一个job未执行完之前就启动起来。

而且,application mode允许一个应用多作业并行执行时,它是不支持高可用的,必须在单个应用单个作业时才是高可用的。

在application mode下,当一个应用中跑了多个作业(使用的是executeAsync()),你如果取消其中一个作业,其他的所有作业均会停止,并且jobmanager会关闭。

使用方法:

# 启动application mode任务
./bin/flink run-application -t yarn-application ./examples/streaming/TopSpeedWindowing.jar

# List running job on the cluster
./bin/flink list -t yarn-application -Dyarn.application.id=application_XXXX_YY
# Cancel running job
./bin/flink cancel -t yarn-application -Dyarn.application.id=application_XXXX_YY <jobId>

3.per-job
应用的main方法执行在client端。

利用现有的资源管理器,如yarn、kubernetes,为每个应用启动单独的集群。每个提交的应用,需要付出启动集群的代价。好处是,更好的保证了jobs之间资源不共享,这样的话,每个集群的生命周期跟单个任务绑定在一块,任务结束就释放了资源。比如某个应用出错了,影响到了taskmanager,导致TaskManager挂了,并不会影响其他任务的TaskManager。所以基于这些优点,生产上推荐这种模式。

使用方法:

# 启动任务
./bin/flink run -t yarn-per-job --detached ./examples/streaming/TopSpeedWindowing.jar

# List running job on the cluster
./bin/flink list -t yarn-per-job -Dyarn.application.id=application_XXXX_YY
# Cancel running job
./bin/flink cancel -t yarn-per-job -Dyarn.application.id=application_XXXX_YY <jobId>

4.session mode
应用的main方法执行在client端。

集群的生命周期是非独立的,包含了所有的running job,资源是共享的。

优点就是集群已经启动起来了,每个提交的任务不需要单独启动集群,使用现有的资源即可,缺点是如果某一个任务出错导致TaskManager挂了,那么其他所有的运行中的任务都会受到影响。

# 启动任务
./bin/flink run -t yarn-session \
  -Dyarn.application.id=application_XXXX_YY \
  ./examples/streaming/TopSpeedWindowing.jar

综上所述,总结下来,application mode和per-job mode适合生产使用,因为资源隔离,互不影响是最关键的。

参考链接:https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/deployment/overview/

ok,完成


书山有路勤为径,学海无涯苦作舟。

欢迎关注微信公众号:【程序员写书】
程序员写书

喜欢宠物的朋友可以关注:【电巴克宠物Pets】
电巴克宠物

一起学习,一起进步。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:45:16  更:2021-07-25 11:46:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/30 23:48:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码