1)集群角色
2)Flink 集群搭建
2.1.集群?jiǎn)?dòng)
集群規(guī)劃:
具體安裝部署步驟如下:
1、下載并解壓安裝包
(1)下載安裝包 flink-1.17.0-bin-scala_2.12.tgz,將該 jar 包上傳到 hadoop102 節(jié)點(diǎn)服務(wù)器的 /opt/software 路徑上。
(2)在 /opt/software 路徑上解壓 flink-1.17.0-bin-scala_2.12.tgz 到 /opt/module 路徑上。
[atguigu@hadoop102 software]$ tar -zxvf flink-1.17.0-bin-scala_2.12.tgz -C /opt/module/
2、修改集群配置
(1)進(jìn)入 conf 路徑,修改 flink-conf.yaml 文件,指定 hadoop102 節(jié)點(diǎn)服務(wù)器為 JobManager
[atguigu@hadoop102 conf]$ vim flink-conf.yaml
修改如下內(nèi)容:
# JobManager節(jié)點(diǎn)地址.
jobmanager.rpc.address: hadoop102
jobmanager.bind-host: 0.0.0.0
rest.address: hadoop102
rest.bind-address: 0.0.0.0
# TaskManager節(jié)點(diǎn)地址.需要配置為當(dāng)前機(jī)器名
taskmanager.bind-host: 0.0.0.0
taskmanager.host: hadoop102
(2)修改 workers 文件,指定 hadoop102、hadoop103 和 hadoop104 為 TaskManager
[atguigu@hadoop102 conf]$ vim workers
修改如下內(nèi)容:
hadoop102
hadoop103
hadoop104
(3)修改 masters 文件
[atguigu@hadoop102 conf]$ vim masters
修改如下內(nèi)容:
hadoop102:8081
(4)另外,在 flink-conf.yaml 文件中還可以對(duì)集群中的 JobManager 和 TaskManager 組件進(jìn)行優(yōu)化配置,主要配置項(xiàng)如下:
- jobmanager.memory.process.size:對(duì) JobManager 進(jìn)程可使用到的全部?jī)?nèi)存進(jìn)行配置,包括 JVM 元空間和其他開銷,默認(rèn)為 1600M,可以根據(jù)集群規(guī)模進(jìn)行適當(dāng)調(diào)整。
- taskmanager.memory.process.size:對(duì) TaskManager 進(jìn)程可使用到的全部?jī)?nèi)存進(jìn)行配置,包括 JVM 元空間和其他開銷,默認(rèn)為 1728M,可以根據(jù)集群規(guī)模進(jìn)行適當(dāng)調(diào)整。
- taskmanager.numberOfTaskSlots:對(duì)每個(gè) TaskManager 能夠分配的 Slot 數(shù)量進(jìn)行配置,默認(rèn)為1,可根據(jù) TaskManager 所在的機(jī)器能夠提供給 Flink 的 CPU 數(shù)量決定。所謂 Slot 就是 TaskManager 中具體運(yùn)行一個(gè)任務(wù)所分配的計(jì)算資源。
- parallelism.default:Flink 任務(wù)執(zhí)行的并行度,默認(rèn)為 1。優(yōu)先級(jí)低于代碼中進(jìn)行的并行度配置和任務(wù)提交時(shí)使用參數(shù)指定的并行度數(shù)量。
關(guān)于 Slot 和并行度的概念,我們會(huì)在下一章做詳細(xì)講解。
3、分發(fā)安裝目錄
(1)配置修改完畢后,將Flink安裝目錄發(fā)給另外兩個(gè)節(jié)點(diǎn)服務(wù)器。
[atguigu@hadoop102 module]$ xsync flink-1.17.0/
(2)修改hadoop103的 taskmanager.host
[atguigu@hadoop103 conf]$ vim flink-conf.yaml
修改如下內(nèi)容:
# TaskManager節(jié)點(diǎn)地址.需要配置為當(dāng)前機(jī)器名
taskmanager.host: hadoop103
(3)修改hadoop104的 taskmanager.host
[atguigu@hadoop104 conf]$ vim flink-conf.yaml
修改如下內(nèi)容:
# TaskManager節(jié)點(diǎn)地址.需要配置為當(dāng)前機(jī)器名
taskmanager.host: hadoop104
4、啟動(dòng)集群
(1)在hadoop102 節(jié)點(diǎn)服務(wù)器上執(zhí)行 start-cluster.sh 啟動(dòng) Flink 集群:
[atguigu@hadoop102 flink-1.17.0]$ bin/start-cluster.sh
(2)查看進(jìn)程情況:
[atguigu@hadoop102 flink-1.17.0]$ jpsall
=============== hadoop102 ===============
4453 StandaloneSessionClusterEntrypoint
4458 TaskManagerRunner
4533 Jps
=============== hadoop103 ===============
2872 TaskManagerRunner
2941 Jps
=============== hadoop104 ===============
2948 Jps
2876 TaskManagerRunner
jpsall 腳本:
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo ============ $host ===========
ssh $host jps $@ | grep -v Jps
done
5、訪問(wèn) Web UI
啟動(dòng)成功后,同樣可以訪問(wèn) http://hadoop102:8081 對(duì)flink集群和任務(wù)進(jìn)行監(jiān)控管理。
這里可以明顯看到,當(dāng)前集群的 TaskManager 數(shù)量為 3;由于默認(rèn)每個(gè) TaskManager 的 Slot 數(shù)量為 1,所以總 Slot 數(shù)和可用 Slot 數(shù)都為 3。
2.2.向集群提交作業(yè)
在上一章中,我們已經(jīng)編寫讀取 socket 發(fā)送的單詞并統(tǒng)計(jì)單詞的個(gè)數(shù)程序案例。本節(jié)我們將以該程序?yàn)槔?,演示如何將任?wù)提交到集群中進(jìn)行執(zhí)行。具體步驟如下。
1、環(huán)境準(zhǔn)備
在 hadoop102 中執(zhí)行以下命令啟動(dòng) netcat。
[atguigu@hadoop102 flink-1.17.0]$ nc -lk 7777
2、程序打包
(1)在我們編寫的 Flink 入門程序的 pom.xml 文件中添加打包插件的配置,具體如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
<exclude>com.google.code.findbugs:jsr305</exclude>
<exclude>org.slf4j:*</exclude>
<exclude>log4j:*</exclude>
</excludes>
</artifactSet>
<filters>
<filter>
<!-- Do not copy the signatures in
the META-INF folder.
Otherwise, this might cause
SecurityExceptions when using the JAR. -->
<artifact>*:*</artifact>
<excludes>
<exclude>METAINF/*.SF</exclude>
<exclude>METAINF/*.DSA</exclude>
<exclude>METAINF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers combine.children="append">
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesRes
ourceTransformer">
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
(2)插件配置完畢后,可以使用 IDEA 的 Maven 工具執(zhí)行 package 命令,出現(xiàn)如下提示即表示打包成功。
-------------------------------------------------------------------
[INFO] BUILD SUCCESS
-------------------------------------------------------------------
打包完成后,在 target 目錄下即可找到所需 JAR 包,JAR 包會(huì)有兩個(gè),F(xiàn)linkTutorial-1.0-SNAPSHOT.jar 和 FlinkTutorial-1.0-SNAPSHOT-jar-with-dependencies.jar,因?yàn)榧褐幸呀?jīng)具備任務(wù)運(yùn)行所需的所有依賴,所以建議使用 FlinkTutorial-1.0-SNAPSHOT.jar。
3、在 Web UI 上提交作業(yè)
(1)任務(wù)打包完成后,我們打開 Flink 的 WEB UI 頁(yè)面,在右側(cè)導(dǎo)航欄點(diǎn)擊“Submit New Job”,然后點(diǎn)擊按鈕“+ Add New”,選擇要上傳運(yùn)行的 JAR 包,如下圖所示。
JAR 包上傳完成,如下圖所示:
(2)點(diǎn)擊該 JAR 包,出現(xiàn)任務(wù)配置頁(yè)面,進(jìn)行相應(yīng)配置。
主要配置程序入口主類的全類名,任務(wù)運(yùn)行的并行度,任務(wù)運(yùn)行所需的配置參數(shù)和保存點(diǎn)路徑等,如下圖所示,配置完成后,即可點(diǎn)擊按鈕“Submit”,將任務(wù)提交到集群運(yùn)行。
(3)任務(wù)提交成功之后,可點(diǎn)擊左側(cè)導(dǎo)航欄的“Running Jobs”查看程序運(yùn)行列表情況。
(4)測(cè)試
① 在 socket 端口中輸入 hello
[atguigu@hadoop102 flink-1.17.0]$ nc -lk 7777
hello
② 先點(diǎn)擊 Task Manager,然后點(diǎn)擊右側(cè)的 192.168.10.104 服務(wù)器節(jié)點(diǎn)
③ 點(diǎn)擊 Stdout,就可以看到 hello 單詞的統(tǒng)計(jì)
注意:如果 hadoop104 節(jié)點(diǎn)沒(méi)有統(tǒng)計(jì)單詞數(shù)據(jù),可以去其他 TaskManager 節(jié)點(diǎn)查看。
(5)點(diǎn)擊該任務(wù),可以查看任務(wù)運(yùn)行的具體情況,也可以通過(guò)點(diǎn)擊“Cancel Job”結(jié)束任務(wù)運(yùn)行。
4、命令行提交作業(yè)
除了通過(guò) WEB UI 界面提交任務(wù)之外,也可以直接通過(guò)命令行來(lái)提交任務(wù)。這里為方便起見,我們可以先把 jar 包直接上傳到目錄 flink-1.17.0 下
(1)首先需要啟動(dòng)集群。
[atguigu@hadoop102 flink-1.17.0]$ bin/start-cluster.sh
(2)在 hadoop102 中執(zhí)行以下命令啟動(dòng) netcat。
[atguigu@hadoop102 flink-1.17.0]$ nc -lk 7777
(3)將 flink 程序運(yùn)行 jar 包上傳到/opt/module/flink-1.17.0 路徑。
(4)進(jìn)入到 flink 的安裝路徑下,在命令行使用 flink run 命令提交作業(yè)。
[atguigu@hadoop102 flink-1.17.0]$ bin/flink run -m hadoop102:8081 -c com.atguigu.wc.SocketStreamWordCount ./FlinkTutorial-1.0-SNAPSHOT.jar
這里的參數(shù) -m 指定了提交到的 JobManager,-c 指定了入口類。
(5)在瀏覽器中打開 Web UI,http://hadoop102:8081 查看應(yīng)用執(zhí)行情況。用 netcat 輸入數(shù)據(jù),可以在 TaskManager 的標(biāo)準(zhǔn)輸出(Stdout)看到對(duì)應(yīng)的統(tǒng)計(jì)結(jié)果。
(6)在 /opt/module/flink-1.17.0/log 路徑中,可以查看 TaskManager 節(jié)點(diǎn)。
[atguigu@hadoop102 log]$ cat flink-atguigu-standalonesession-0-hadoop102.out
(hello,1)
(hello,2)
(flink,1)
(hello,3)
(scala,1)
3)部署模式
在一些應(yīng)用場(chǎng)景中,對(duì)于集群資源分配和占用的方式,可能會(huì)有特定的需求。Flink 為各種場(chǎng)景提供了不同的部署模式,主要有以下三種:會(huì)話模式(Session Mode)
、單作業(yè)模式(Per-Job Mode)
、應(yīng)用模式(Application Mode)
。
它們的區(qū)別主要在于:集群的生命周期以及資源的分配方式;以及應(yīng)用的 main 方法到底在哪里執(zhí)行——客戶端(Client)還是 JobManager。
3.1.會(huì)話模式(Session Mode)
3.2.單作業(yè)模式(Per-Job Mode)
3.3.應(yīng)用模式(Application Mode)
這里我們所講到的部署模式,相對(duì)是比較抽象的概念。實(shí)際應(yīng)用時(shí),一般需要和資源管理平臺(tái)結(jié)合起來(lái),選擇特定的模式來(lái)分配資源、部署應(yīng)用。接下來(lái),我們就針對(duì)不同的資源提供者的場(chǎng)景,具體介紹 Flink 的部署方式。
3.4.Standalone 運(yùn)行模式(了解)
獨(dú)立模式是獨(dú)立運(yùn)行的,不依賴任何外部的資源管理平臺(tái);當(dāng)然獨(dú)立也是有代價(jià)的:如果資源不足,或者出現(xiàn)故障,沒(méi)有自動(dòng)擴(kuò)展或重分配資源的保證,必須手動(dòng)處理。所以獨(dú)立模式一般只用在開發(fā)測(cè)試或作業(yè)非常少的場(chǎng)景下。
3.4.1.會(huì)話模式部署
我們?cè)诘?2)
節(jié)用的就是 Standalone 集群的會(huì)話模式部署。
提前啟動(dòng)集群,并通過(guò) Web 頁(yè)面客戶端提交任務(wù)(可以多個(gè)任務(wù),但是集群資源固定)。
3.4.2.單作業(yè)模式部署
Flink 的 Standalone 集群并不支持單作業(yè)模式部署。因?yàn)閱巫鳂I(yè)模式需要借助一些資源管理平臺(tái)。
3.4.3.應(yīng)用模式部署
應(yīng)用模式下不會(huì)提前創(chuàng)建集群,所以不能調(diào)用 start-cluster.sh 腳本。我們可以使用同樣在 bin 目錄下的 standalone-job.sh 來(lái)創(chuàng)建一個(gè) JobManager。
具體步驟如下:
(0)環(huán)境準(zhǔn)備。在 hadoop102 中執(zhí)行以下命令啟動(dòng) netcat。
[atguigu@hadoop102 flink-1.17.0]$ nc -lk 7777
(1)進(jìn)入到 Flink 的安裝路徑下,將應(yīng)用程序的 jar 包放到 lib/目錄下。
[atguigu@hadoop102 flink-1.17.0]$ mv FlinkTutorial-1.0-SNAPSHOT.jar lib/
(2)執(zhí)行以下命令,啟動(dòng) JobManager。
[atguigu@hadoop102 flink-1.17.0]$ bin/standalone-job.sh start --job-classname com.atguigu.wc.SocketStreamWordCount
這里我們直接指定作業(yè)入口類,腳本會(huì)到 lib 目錄掃描所有的 jar 包。
(3)同樣是使用 bin 目錄下的腳本,啟動(dòng) TaskManager。
[atguigu@hadoop102 flink-1.17.0]$ bin/taskmanager.sh start
(4)在 hadoop102 上模擬發(fā)送單詞數(shù)據(jù)。
[atguigu@hadoop102 ~]$ nc -lk 7777
hello
(5)在 hadoop102:8081 地址中觀察輸出數(shù)據(jù)
(6)如果希望停掉集群,同樣可以使用腳本,命令如下。
[atguigu@hadoop102 flink-1.17.0]$ bin/taskmanager.sh stop
[atguigu@hadoop102 flink-1.17.0]$ bin/standalone-job.sh stop
3.5.YARN 運(yùn)行模式(重點(diǎn))
YARN 上部署的過(guò)程是:客戶端把 Flink 應(yīng)用提交給 Yarn 的 ResourceManager,Yarn 的 ResourceManager 會(huì) 向 Yarn 的 NodeManager 申 請(qǐng) 容 器 。 在 這 些 容 器 上 , Flink 會(huì) 部 署 JobManager 和 TaskManager 的實(shí)例,從而啟動(dòng)集群。Flink 會(huì)根據(jù)運(yùn)行在 JobManger 上的作業(yè)所需要的 Slot 數(shù)量動(dòng)態(tài)分配 TaskManager 資源。
3.5.1.相關(guān)準(zhǔn)備和配置
在將 Flink 任務(wù)部署至 YARN 集群之前,需要確認(rèn)集群是否安裝有 Hadoop,保證 Hadoop 版本至少在 2.2 以上,并且集群中安裝有 HDFS 服務(wù)。
具體配置步驟如下:
(1)配置環(huán)境變量,增加環(huán)境變量配置如下:
$ sudo vim /etc/profile.d/my_env.sh
HADOOP_HOME=/opt/module/hadoop-3.3.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CLASSPATH=`hadoop classpath`
(2)啟動(dòng) Hadoop 集群,包括 HDFS 和 YARN。
[atguigu@hadoop102 hadoop-3.3.4]$ start-dfs.sh
[atguigu@hadoop103 hadoop-3.3.4]$ start-yarn.sh
(3)在 hadoop102 中執(zhí)行以下命令啟動(dòng) netcat。
[atguigu@hadoop102 flink-1.17.0]$ nc -lk 7777
3.5.2.會(huì)話模式部署
YARN 的會(huì)話模式與獨(dú)立集群略有不同,需要首先申請(qǐng)一個(gè) YARN 會(huì)話(YARN Session)來(lái)啟動(dòng) Flink 集群。具體步驟如下:
1、啟動(dòng)集群
(1)啟動(dòng) Hadoop 集群(HDFS、YARN)。
(2)執(zhí)行腳本命令向 YARN 集群申請(qǐng)資源,開啟一個(gè) YARN 會(huì)話,啟動(dòng) Flink 集群。
[atguigu@hadoop102 flink-1.17.0]$ bin/yarn-session.sh -nm test
可用參數(shù)解讀:
- -d:分離模式,如果你不想讓 Flink YARN 客戶端一直前臺(tái)運(yùn)行,可以使用這個(gè)參數(shù),
即使關(guān)掉當(dāng)前對(duì)話窗口,YARN session 也可以后臺(tái)運(yùn)行。 - -jm(–jobManagerMemory):配置 JobManager 所需內(nèi)存,默認(rèn)單位 MB。
- -nm(–name):配置在 YARN UI 界面上顯示的任務(wù)名。
- -qu(–queue):指定 YARN 隊(duì)列名。
- -tm(–taskManager):配置每個(gè) TaskManager 所使用內(nèi)存。
注意:Flink1.11.0 版本不再使用-n 參數(shù)和-s 參數(shù)分別指定 TaskManager 數(shù)量和 slot 數(shù)量,YARN 會(huì)按照需求動(dòng)態(tài)分配 TaskManager 和 slot。所以從這個(gè)意義上講,YARN 的會(huì)話模式也不會(huì)把集群資源固定,同樣是動(dòng)態(tài)分配的。
YARN Session 啟動(dòng)之后會(huì)給出一個(gè) Web UI 地址以及一個(gè) YARN application ID,如下所示,用戶可以通過(guò) Web UI 或者命令行兩種方式提交作業(yè)。
2022-11-17 15:20:52,711 INFO org.apache.flink.yarn.YarnClusterDescriptor [] -Found Web Interface hadoop104:40825 of application
'application_1668668287070_0005'.
JobManager Web Interface: http://hadoop104:40825
2、提交作業(yè)
(1)通過(guò) Web UI 提交作業(yè)
這種方式比較簡(jiǎn)單,與上文所述 Standalone 部署模式基本相同。
(2)通過(guò)命令行提交作業(yè)
① 將 FlinkTutorial-1.0-SNAPSHOT.jar 任務(wù)上傳至集群。
② 執(zhí)行以下命令將該任務(wù)提交到已經(jīng)開啟的 Yarn-Session 中運(yùn)行。
[atguigu@hadoop102 flink-1.17.0]$ bin/flink run-c com.atguigu.wc.SocketStreamWordCount FlinkTutorial-1.0-SNAPSHOT.jar
客戶端可以自行確定 JobManager 的地址,也可以通過(guò)-m 或者-jobmanager 參數(shù)指定 JobManager 的地址,JobManager 的地址在 YARN Session 的啟動(dòng)頁(yè)面中可以找到。
③ 任務(wù)提交成功后,可在 YARN 的 Web UI 界面查看運(yùn)行情況。hadoop103:8088。
從上圖中可以看到我們創(chuàng)建的 Yarn-Session 實(shí)際上是一個(gè) Yarn 的 Application,并且有唯一的 Application ID。
④ 也可以通過(guò) Flink 的 Web UI 頁(yè)面查看提交任務(wù)的運(yùn)行情況,如下圖所示。
3.5.3.單作業(yè)模式部署
在 YARN 環(huán)境中,由于有了外部平臺(tái)做資源調(diào)度,所以我們也可以直接向 YARN 提交一個(gè)單獨(dú)的作業(yè),從而啟動(dòng)一個(gè) Flink 集群。
(1)執(zhí)行命令提交作業(yè)。
[atguigu@hadoop102 flink-1.17.0]$ bin/flink run -d -t yarn-per-job-c com.atguigu.wc.SocketStreamWordCount FlinkTutorial-1.0-SNAPSHOT.jar
注意:如果啟動(dòng)過(guò)程中報(bào)如下異常。
Exception in thread “Thread-5” java.lang.IllegalStateException:Trying to access closed classloader. Please check if you store
classloaders directly or indirectly in static fields. If thestacktrace suggests that the leak occurs in a third party library
and cannot be fixed immediately, you can disable this check withthe configuration ‘classloader.check-leaked-classloader’.
atorg.apache.flink.runtime.execution.librarycache.FlinkUserCodeClassLoaders
解決辦法:在 flink 的/opt/module/flink-1.17.0/conf/flink-conf.yaml 配置文件中設(shè)置
[atguigu@hadoop102 conf]$ vim flink-conf.yaml
classloader.check-leaked-classloader: false
(2)在 YARN 的 ResourceManager 界面查看執(zhí)行情況。
點(diǎn)擊可以打開 Flink Web UI 頁(yè)面進(jìn)行監(jiān)控,如下圖所示:
(3)可以使用命令行查看或取消作業(yè),命令如下。
[atguigu@hadoop102 flink-1.17.0]$ bin/flink list -t yarn-per-job -Dyarn.application.id=application_XXXX_YY
[atguigu@hadoop102 flink-1.17.0]$ bin/flink cancel -t yarn-per-job -Dyarn.application.id=application_XXXX_YY <jobId>
這里的 application_XXXX_YY 是當(dāng)前應(yīng)用的 ID,是作業(yè)的 ID。注意如果取消作業(yè),整個(gè) Flink 集群也會(huì)停掉。
3.5.4.應(yīng)用模式部署
應(yīng)用模式同樣非常簡(jiǎn)單,與單作業(yè)模式類似,直接執(zhí)行 flink run-application 命令即可。
1、命令行提交
(1)執(zhí)行命令提交作業(yè)。
[atguigu@hadoop102 flink-1.17.0]$ bin/flink run-application -t yarn-application -c com.atguigu.wc.SocketStreamWordCount FlinkTutorial-1.0-SNAPSHOT.jar
(2)在命令行中查看或取消作業(yè)。
[atguigu@hadoop102 flink-1.17.0]$ bin/flink list -t yarnapplication -Dyarn.application.id=application_XXXX_YY
[atguigu@hadoop102 flink-1.17.0]$ bin/flink cancel -t yarnapplication -Dyarn.application.id=application_XXXX_YY <jobId>
2、上傳 HDFS 提交
可以通過(guò) yarn.provided.lib.dirs 配置選項(xiàng)指定位置,將 flink 的依賴上傳到遠(yuǎn)程。
(1)上傳 flink 的 lib 和 plugins 到 HDFS 上
[atguigu@hadoop102 flink-1.17.0]$ hadoop fs -mkdir /flink-dist
[atguigu@hadoop102 flink-1.17.0]$ hadoop fs -put lib/ /flink-dist
[atguigu@hadoop102 flink-1.17.0]$ hadoop fs -put plugins/ /flink-dist
(2)上傳自己的 jar 包到 HDFS
[atguigu@hadoop102 flink-1.17.0]$ hadoop fs -mkdir /flink-jars
[atguigu@hadoop102 flink-1.17.0]$ hadoop fs -put FlinkTutorial-1.0-SNAPSHOT.jar /flink-jars
(3)提交作業(yè)
[atguigu@hadoop102 flink-1.17.0]$ bin/flink run-application -t yarn-application -Dyarn.provided.lib.dirs="hdfs://hadoop102:8020/flink-dist" -c com.atguigu.wc.SocketStreamWordCount hdfs://hadoop102:8020/flink-jars/FlinkTutorial-1.0-SNAPSHOT.jar
這種方式下,flink 本身的依賴和用戶 jar 可以預(yù)先上傳到 HDFS,而不需要單獨(dú)發(fā)送到集
群,這就使得作業(yè)提交更加輕量了。
3.6.K8S 運(yùn)行模式(了解)
容器化部署是如今業(yè)界流行的一項(xiàng)技術(shù),基于 Docker 鏡像運(yùn)行能夠讓用戶更加方便地對(duì)應(yīng)用進(jìn)行管理和運(yùn)維。容器管理工具中最為流行的就是 Kubernetes(k8s),而 Flink 也在最近的版本中支持了 k8s 部署模式?;驹砼c YARN 是類似的,具體配置可以參見官網(wǎng)說(shuō)明,這里我們就不做過(guò)多講解了。
3.7.歷史服務(wù)器
運(yùn)行 Flink job 的集群一旦停止,只能去 yarn 或本地磁盤上查看日志,不再可以查看作業(yè)掛掉之前的運(yùn)行的 Web UI,很難清楚知道作業(yè)在掛的那一刻到底發(fā)生了什么。如果我們還沒(méi)有 Metrics 監(jiān)控的話,那么完全就只能通過(guò)日志去分析和定位問(wèn)題了,所以如果能還原之前的 Web UI,我們可以通過(guò) UI 發(fā)現(xiàn)和定位一些問(wèn)題。
Flink 提供了歷史服務(wù)器,用來(lái)在相應(yīng)的 Flink 集群關(guān)閉后查詢已完成作業(yè)的統(tǒng)計(jì)信息。我們都知道只有當(dāng)作業(yè)處于運(yùn)行中的狀態(tài),才能夠查看到相關(guān)的 WebUI 統(tǒng)計(jì)信息。通過(guò)History Server 我們才能查詢這些已完成作業(yè)的統(tǒng)計(jì)信息,無(wú)論是正常退出還是異常退出。
此外,它對(duì)外提供了 REST API,它接受 HTTP 請(qǐng)求并使用 JSON 數(shù)據(jù)進(jìn)行響應(yīng)。Flink任務(wù)停止后,JobManager 會(huì)將已經(jīng)完成任務(wù)的統(tǒng)計(jì)信息進(jìn)行存檔,History Server 進(jìn)程則在任務(wù)停止后可以對(duì)任務(wù)統(tǒng)計(jì)信息進(jìn)行查詢。比如:最后一次的 Checkpoint、任務(wù)運(yùn)行時(shí)的相關(guān)配置。
1、創(chuàng)建存儲(chǔ)目錄
hadoop fs -mkdir -p /logs/flink-job
2、在 flink-config.yaml 中添加如下配置
jobmanager.archive.fs.dir: hdfs://hadoop102:8020/logs/flink-job
historyserver.web.address: hadoop102
historyserver.web.port: 8082
historyserver.archive.fs.dir: hdfs://hadoop102:8020/logs/flink-job
historyserver.archive.fs.refresh-interval: 5000
3、啟動(dòng)歷史服務(wù)器
bin/historyserver.sh start
4、停止歷史服務(wù)器文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-800230.html
bin/historyserver.sh stop
5、在瀏覽器地址欄輸入:http://hadoop102:8082 查看已經(jīng)停止的 job 的統(tǒng)計(jì)信息文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-800230.html
到了這里,關(guān)于【Flink-1.17-教程】-【二】Flink 集群搭建、Flink 部署、Flink 運(yùn)行模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!