Flink入門——基礎知識,Linux安裝,Docker安裝

前言

在linux部署Flink需要先安裝Java的JDK。

Flink的安裝包,需要到官網先下載。

官網下載地址:https://flink.apache.org/downloads/
各個版本下載地址:https://dlcdn.apache.org/flink/

Flink相關網站如下:

flink官網學習地址:https://nightlies.apache.org/flink/flink-docs-stable/docs/try-flink/local_installation/
flinkCDC,cdc不是flink提供的,是ververica提供的,
參考地址:MySQL CDC 連接器 — CDC Connectors for Apache Flink® documentation (ververica.github.io)
https://ververica.github.io/flink-cdc-connectors/master/content/connectors/mysql-cdc(ZH).html
https://github.com/ververica/flink-cdc-connectors

Flink還可以做機器學習,常用機器學習KMeans,LinearRegression,學習使用地址如下:

https://nightlies.apache.org/flink/flink-ml-docs-master/docs/operators/clustering/kmeans/
https://nightlies.apache.org/flink/flink-ml-docs-master/docs/operators/regression/linearregression/
然後使用final shell上傳到 soft/resources下。

Flink安裝

先下載安裝包。

然後上傳到 soft/resources下。

然後進入soft/resources,執行命令解壓

tar -zxvf flink-1.18.0-bin-scala_2.12.tgz -C /soft/flink/

然後進入flink文件夾

# cd /soft/flink/flink-1.18.0/

然後進入conf。

cd conf

然後修改配置文件裏的localhost都改爲0.0.0.0

 vi flink-conf.yaml

然後執行命令啓動

bin/start-cluster.sh 

然後放行8081,也可以直接關閉防火牆。

輸入以下命令以停止防火牆服務:

sudo systemctl stop ufw.service

輸入以下命令以禁用防火牆服務:

sudo systemctl disable ufw.service

輸入以下命令以確認防火牆服務已關閉:

sudo ufw status

然後jps查看進程

jps

然後訪問10.1.0.145:8081


flink創建項目

開發flink可以創建maven項目,flink提供了一個快速創建的jar包——flink-quickstart-java。
依賴如下:

<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-quickstart-java -->
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-quickstart-java</artifactId>
    <version>1.18.0</version>
</dependency>

CDC我們都知道是 Change Data Capture。本來這個是數據庫提供的,比如日誌記錄等等。
在Flink裏也有CDC的功能,本質上就是把數據庫的CDC給捕獲了。
Flink連接Mysql的CDC就是連接Mysql的Binlog。
flinkCDC,cdc不是flink提供的,是ververica提供的。
參考地址:MySQL CDC 連接器 — CDC Connectors for Apache Flink® documentation (ververica.github.io)

Flink如果出現classloader異常,可以考慮修改配置文件——flink-conf.yaml,來應對classloader異常
classloader.check-leaked-classloader: false
這個我沒測試過,這裏做個記錄

Flink——Docker實戰

使用docker search命令,查詢flink鏡像如下:

Flink的鏡像,可以在https://hub-stage.docker.com/_/java/tags網站上找到。

可以直接拉取Flink鏡像,也可以自己下載Flink安裝。

下面使用java的jdk鏡像,然後導入Flink壓縮包的模式安裝。

拉取java-jdk鏡像命令如下:

docker pull java:openjdk-8u111-jre

openjdk:8-jdk-alpinejava:openjdk-8u111-jre都是Java的安裝包,但它們的來源和用途略有不同。
openjdk:8-jdk-alpine是基於Alpine Linux構建的輕量級JDK版本,它包含了Java運行環境所需的基本組件,體積更小巧,適合於資源有限的環境。你可以使用它在Docker容器中運行Java應用程序。
java:openjdk-8u111-jre則是OpenJDK發行的標準JRE(Java Runtime Environment),它包含Java虛擬機(JVM)和Java應用程序所需的類庫。它是一個獨立的安裝包,可以在各種操作系統上安裝和使用。

綜上所述,你可以根據具體的應用場景和需求來選擇使用哪個安裝包。如果你需要在Docker容器中運行Java應用程序,可以選擇openjdk:8-jdk-alpine;如果你需要在本地計算機上安裝和使用Java,可以選擇java:openjdk-8u111-jre

拉取成功如下:

然後執行run命令,使用鏡像生成一個容器。

docker run -it -d --name flink-server -p 8082:8081  java:openjdk-8u111-jre  /bin/bash
  1. docker run: 這是運行 Docker 容器的命令。
  2. -it: 這是選項,其中-i表示以交互模式運行容器,-t表示爲容器分配一個僞終端。
  3. -d: 這是選項,表示以守護進程模式運行容器,即在後臺運行容器。
  4. --name flink-server: 這是爲容器指定一個名稱,這裏將容器命名爲flink-server
  5. -p 8082:8081: 這是將容器的端口 8081 映射到主機的端口 8082。
  6. java:openjdk-8u111-jre: 這是指定要使用的基礎鏡像,這裏使用的是 OpenJDK 8 的 JRE(Java Runtime Environment)。
  7. /bin/bash: 這是指定在容器啓動後執行的命令,這裏執行的是/bin/bash,即啓動一個 Bash 終端。

運行成功如下圖:

運行後可以使用下面命令增加端口映射(未測試)

docker run -p 8082:8081 flink-server

查看全部開放的端口

netstat -untlp

使用docker ps可以查看已經運行的容器,如下圖:

執行下面命令,可以進入容器內部。

docker exec -it <container-id> /bin/bash
docker exec -it 221aed7411ad3654a43d157ea4bb75ce20cf065fc34de0b5026e404418509158 /bin/bash 

如下圖:

輸入java -version可以查看已安裝的java版本,如下圖:

然後創建一個resources的文件夾,一個soft文件夾,一個soft/flink文件夾。

mkdir resources
mkdir soft
mkdir soft/flink

然後退出容器

exit

然後執行docker cp 複製系統中的文件到指定的容器下,代碼如下:

docker cp /soft/resources/flink-1.17.1-bin-scala_2.12.tgz  flink-server:/resources/flink-1.17.1-bin-scala_2.12.tgz

複製成功如下:

然後重新進入容器,查看 ls resources,如下圖:

然後進入cd resources文件夾,開始解壓flink。這裏使用1.17.1,因爲當時1.18還沒有對應的cdc包。

 tar -zxvf flink-1.17.1-bin-scala_2.12.tgz -C /soft/flink/

然後進入flink下的flink-1.17.1文件夾

 cd /soft/flink/flink-1.17.1

然後進入conf。

cd conf

然後修改配置文件裏的localhost都改爲0.0.0.0

 vi flink-conf.yaml

但容器裏通常沒有vi命令,因爲沒有安裝vi工具,因此需要安裝vi工具。

在容器裏執行下面命令

 apt-get update
 apt-get install vim

如果安裝提示E: Unable to locate package vim ,是因爲下載地址是海外地址。

修改爲國內鏡像地址即可。

修改方案一:(親測這個163的地址不好用)

mv /etc/apt/sources.list /etc/apt/sources.list.bak
 
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list
 
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list

修改方案二:(親測,替換鏡像後,apt-get update雖然也有錯誤,但vim安裝成功了)

mv /etc/apt/sources.list /etc/apt/sources.list.bak

echo  "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free" > /etc/apt/sources.list 

echo  "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free" >>/etc/apt/sources.list 

echo  "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free" >>/etc/apt/sources.list

echo  "deb http://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free">>/etc/apt/sources.list 

然後重新執行 vi flink-conf.yaml,修改配置文件裏的localhost都改爲0.0.0.0。

numberOfTaskSlots和parallelism

配置flink-conf.yaml下的numberOfTaskSlots和parallelism。

numberOfTaskSlots是指任務管理器的併發執行能力,而Parallelism是指任務管理器實際使用的併發能力。numberOfTaskSlots可以通過參數taskmanager.numberOfTaskSlots進行配置,而Parallelism可以通過參數Parallelism.default進行配置。

taskmanager.numberOfTaskSlots定義的是【每個】任務管理器可使用的槽的數量,即如果有3個任務管理器,則配置taskmanager.numberOfTaskSlots爲3時,等於我們定義了9個槽。通常,每個 TaskManager 的 numberOfTaskSlots 等於該機器上的 CPU 核數。

Parallelism.default是配置併發最大數量,如果配置爲16,則我們開發的flink-job時,配置的並行度也需要小於16,否則安裝到flink服務器時,將啓動失敗。如果服務器上上傳多個job,那多個job的併發數量之和也要小於16,否則最後一個將啓動失敗。

開發時配置並行度代碼:

env.setParallelism(1);//設置輸入流並行度

配置flink-conf.yaml 的numberOfTaskSlots和parallelism:

# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.
taskmanager.numberOfTaskSlots: 16
# The parallelism used for programs that did not specify and other parallelism.
parallelism.default: 16

當CPU爲16核時,推薦配置如下:

taskmanager.numberOfTaskSlots: 16
parallelism.default: 16
parallelism.default: 32
parallelism.default: 64
parallelism.default: 128

然後 cd ../返回上一級,然後執行命令啓動

bin/start-cluster.sh 

然後訪問10.1.0.100:8082(因爲前面已經關閉了防火牆,所以這裏可以直接訪問,不然要開發固定端口)

到此,Flink的docker就配置完了。

其他Dock命令

which docker #which docker` 命令用於查找 `docker命令所在的路徑。
docker images #查看當前服務器中docker 鏡像列表
docker ps #查看正則運行的容器
docker ps -a #查看已停止的容器
netstat -untlp #需要查看端口占用 情況
kill -9 #進程號 殺進程

Docker自定義鏡像

鏡像創建好後,我們可以將鏡像保存下來。
保存鏡像命令如下:

docker commit flink-server flink-server-image;
docker save flink-server-image -o /soft/resources/flink-server-20240104.tar;

如下圖:

在執行了docker commit後,我們就可以在本地鏡像裏找到我們剛剛提交的鏡像了,輸入docker images,就可以找到flink-server-image了,如下圖:

然後我們使用本地鏡像flink-server-image再創建一個容器,代碼如下:

docker run -it -d --name flink-server-pre -p 8083:8081  flink-server-image:latest  /bin/bash

執行成功如下圖:

然後進入容器

docker exec -it flink-server-pre /bin/bash

然後cd到/soft/flink/flink-1.17.1,使用ls查看文件信息,如下:

cd /soft/flink/flink-1.17.1

然後執行一下啓動flink,如下:

bin/start-cluster.sh 

然後訪問10.1.0.100:8083,就可以訪問Flink的Web管理頁面了。

到此Docker自定義鏡像結束。


注:此文章爲原創,任何形式的轉載都請聯繫作者獲得授權並註明出處!

若您覺得這篇文章還不錯,請點擊下方的【推薦】,非常感謝!

https://www.cnblogs.com/kiba/p/18027613

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章