大数据入门--Flink(一)安装与Job提交方式

学习版本:1.13.2

组件介绍

参考文档
必须组件

组件介绍实现
Flink Client编译batch或者streaming应用为数据流图,然后提交给JobManager
  • Command Line Interface
  • REST Endpoint
  • SQL Client
  • Python REPL
  • Scala REPL
JobManagerJobManager是Flink的中心工作协调组件的名称。它有针对不同资源提供者的实现,这些资源提供者在高可用性、资源分配行为和支持的作业提交模式上有所不同。
作业提交的作业管理器模式:
Application Mode:仅为一个应用程序运行群集。作业的主方法(或客户端)在JobManager上执行。支持在应用程序中多次调用’execute`/‘executeAsync’。
Per-Job Mode: 只为一个作业运行群集。作业的主方法(或客户端)仅在创建集群之前运行。
Session Mode: 一个JobManager实例管理共享同一TaskManager群集的多个作业
  • Standalone
  • Kubernetes
  • YARN
  • Mesos
TaskManagerTaskManager是实际执行Flink作业的服务。

可选组件

  • High Availability Service Provider
  • File Storage and Persistency
  • Resource Provider
  • Metrics Storage
  • Application-level data sources and sinks

个人见解
部署模式的区别?
参考官方文档分析(引用部分为官方内容翻译)
Session Mode:job manager、task manager资源预先分配,job共享争抢资源,如果task manager使用不当,造成task manager关闭,可能影响其他job运行。但是因为不需要启动ob manager避免了资源创建的过程,适合对启动时间敏感,作业周期短的作业。缺点:资源固定,无法扩展。

会话模式假设一个已经在运行的集群并使用该集群的资源来执行任何提交的应用程序。在同一(会话)集群中执行的应用程序使用并因此竞争相同的资源。这样做的好处是您无需为每个提交的作业支付启动完整集群的资源开销。但是,如果其中一个作业行为不当或关闭了 TaskManager,那么在该 TaskManager 上运行的所有作业都将受到故障的影响。除了对导致失败的作业产生负面影响之外,这意味着潜在的大规模恢复过程,所有重新启动的作业同时访问文件系统并使其对其他服务不可用。此外,让单个集群运行多个作业意味着 JobManager 的负载更大,它负责集群中所有作业的簿记。此模式非常适合启动延迟非常重要的短期作业, 例如交互式查询。

Per-Job Mode:优点:资源可扩展,资源隔离,job互不影响;缺点:运行job时需要创建job manager和task manager,启动开销大,消耗时间。

在 Per-Job 模式下,可用的集群管理器框架(例如YARN 或 Kubernetes)用于为每个提交的作业启动一个 Flink 集群,该集群仅适用于该作业。作业完成后,集群将关闭并清除所有残留资源(例如文件)。此模式允许更好的资源隔离,因为行为不当的作业不会影响任何其他作业。此外,它将簿记负载分散到多个实体中,因为每个应用程序都有自己的 JobManager。鉴于会话模式的上述资源隔离问题,用户通常选择 Per-Job 模式来处理长时间运行的作业,这些作业愿意接受启动延迟的一些增加以支持弹性。

总而言之,在会话模式下,集群生命周期独立于集群上运行的任何作业,并且集群上运行的所有作业共享其资源。per-job 模式选择为每个提交的作业支付启动集群的代价,以便提供更好的资源隔离保证,因为资源不会跨作业共享。在这种情况下,集群的生命周期与作业的生命周期绑定。

Application Mode:取Session Mode和Per-Job Mode各自优点,资源隔离,作业互不影响,将客户端加载优化为Job Manager负责,客户端只负责发起部署job请求。

为每个应用程序创建一个集群可以看作是创建一个仅在特定应用程序的作业之间共享的会话集群,并在应用程序完成时拆除。使用这种架构,应用程序模式提供与 Per-Job 模式相同的资源隔离和负载平衡保证,但以整个应用程序的粒度。这是有道理的,因为属于同一应用程序的作业应该相互关联并被视为一个单元。

main()在 JobManager 上执行该方法不仅可以节省提取作业图所需的 CPU 周期,还可以节省客户端在本地下载依赖项并将作业图及其依赖项传送到集群所需的带宽。此外,它更均匀地分布网络负载,因为每个应用程序有一个 JobManager。这在上图中进行了说明,我们的场景与会话和按作业部署模式部分相同,但这次客户端负载已转移到每个应用程序的 JobManager。

看图说话,敬上
在这里插入图片描述
在这里插入图片描述
说明:

  • 三个颜色代表,有三个job,每个任务的并行度是3
  • TM : task manager
  • JM : job manager

看图分析
Session Model

  • client负责(部分)加载任务
  • 不同job共用TM,不同job共用JM(资源争抢,故障相互影响)

Per-Job Mode:

  • client负责(部分)加载任务
  • JM、TM相互隔离,每个job拥有自己独立的flink集群(资源隔离,互不影响)

Application Mode:

  • client不在负责加载,只负责发起job部署请求,JM负责之前client load部分任务
  • JM、TM相互隔离,每个job拥有自己独立的flink集群(资源隔离,互不影响)

安装方式

  • Standalone(单独)模式:Flink集群,除了关注计算外还需要关注基础设施
  • Yarn:资源管理分配完全交给yarn,flink只负责计算
    • session model
    • per-job model
    • application model

Standalone模式

安装–参考文档
基础配置–参考文档

无需任何配置修改,flink默认为单节点 session cluster

前提条件

  • Java 1.8.x or higher installed,
  • Downloaded a recent Flink distribution from the download page and unpacked it.

配置
vi conf/flink-conf.yaml

jobmanager.rpc.address: hadoop101
taskmanager.numberOfTaskSlots: 2 # task slots 一般配置=cpu核心线程数

vi conf/masters

hadoop101:8081

vi conf/workers

hadoop102
hadoop103
# we assume to be in the root directory of the unzipped Flink distribution

# (1) Start Cluster
$ ./bin/start-cluster.sh

# (2) You can now access the Flink Web Interface on http://localhost:8081

# (3) Submit example job
$ ./bin/flink run ./examples/streaming/TopSpeedWindowing.jar

# (4) Stop the cluster again
$ ./bin/stop-cluster.sh

Yarn

参考文档
准备

  • 启动hadoop 、yarn集群
  • 存在环境变量HADOOP_CLASSPATH,可以通过命令echo $HADOOP_CLASSPATH进行测试
    配置HADOOP_CLASSPATH
    vi conf/config.sh 并添加如下环境变量
    export HADOOP_CLASSPATH=`hadoop classpath`
    
Session Model

启动

./bin/yarn-session.sh -d -n 2 -s 2 -jm 1024 -tm 1024 -nm test 
#....
# 注意,这里打印了我们flink-ui访问地址,每次是动态分配的
JobManager Web Interface: http://hadoop102:38235
2021-09-04 15:39:54,774 INFO  org.apache.flink.yarn.cli.FlinkYarnSessionCli                [] - The Flink YARN session cluster has been started in detached mode. In order to stop Flink gracefully, use the following command:
$ echo "stop" | ./bin/yarn-session.sh -id application_1630733889027_0010
If this should not be possible, then you can also kill Flink via YARN's web interface or via:
$ yarn application -kill application_1630733889027_0010
Note that killing Flink might not clean up all job artifacts and temporary files.

其中:
-n(–container):TaskManager 的数量。
-s(–slots): 每个 TaskManager 的 slot 数量,默认一个 slot 一个 core,默认每个
taskmanager 的 slot 的个数为 1,有时可以多一些 taskmanager,做冗余。
-jm:JobManager 的内存(单位 MB)。
-tm:每个 taskmanager 的内存(单位 MB)。
-nm:yarn 的 appName(现在 yarn 的 ui 上的名字)。
-d:后台执行。

访问日志中输出的Web Interface:http://hadoop102:38235,即为UI页面

提交一个任务

 bin/flink run ./examples/streaming/WordCount.jar \
 --input hdfs://hadoop101:8020/flink/test/wordcount.txt \
 --output hdfs://hadoop101:8020/flink/output/worcount

停止
找到yarn 的app id
在这里插入图片描述

# 这里id 进行替换
echo "stop" | ./bin/yarn-session.sh -id application_1630733889027_0005
Per-Job Mode

启动
不需要启动 yarn-session,直接提交job

./bin/flink run -t yarn-per-job --detached ./examples/streaming/TopSpeedWindowing.jar

停止

# List running job on the cluster
# application_XXXX_YY:替换为实际值
./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>

有没有发现:flink list/cancel 命令需要指定Dyarn.application.id 和job类型???
答:这从侧面说明了,per-job mode包括下面的application mode是需要yarn分配一个Application,每个flink job是相互独立的。另一方面,在我们使用session mode时,我们提交一个job前需要先bin/yarn-session.sh,而提交job后,yarn上不会为job创建一个Application。所以session model资源是共享的。

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>

注意:web interface的输出

2021-09-04 15:58:55,683 INFO  org.apache.flink.yarn.YarnClusterDescriptor                  [] - YARN application has been deployed successfully.
2021-09-04 15:58:55,684 INFO  org.apache.flink.yarn.YarnClusterDescriptor                  [] - Found Web Interface hadoop101:37599 of application 'application_1630733889027_0012'.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值