這將是一套完整詳細(xì)且持續(xù)更新的缰盏、長期維護(hù)的 原創(chuàng) Flink系列教程、文檔坠狡,其中會包含商用實例詳解继找、Flink源碼講解、機制剖析逃沿、周邊組件講解等婴渡,旨在幫助開發(fā)者快速融入Flink開發(fā),或作為工具文檔參閱凯亮。也希望更多的開發(fā)者可以參與到大數(shù)據(jù)相關(guān)的技術(shù)討論中來边臼,共同商討疑難雜癥,豐富社區(qū)假消∧ⅲ——盡際
本文標(biāo)題: Flink介紹與環(huán)境梳理
文章作者: 盡際
發(fā)布時間: 2019年07月17日 - 22:27:30
最后更新: 2019年07月22日 - 22:27:30
原始鏈接: http://www.reibang.com/p/86d0cbe2f45a
許可協(xié)議: 署名-非商業(yè)性使用-禁止演繹 4.0 國際 轉(zhuǎn)載請保留原文鏈接及作者。
一、Flink介紹與環(huán)境梳理
在這部分系列教程中臼予,暫且略過大數(shù)據(jù)相關(guān)介紹與Flink在生態(tài)圈中的定位介紹亿傅,畢竟,讀者可以通過搜索引擎查閱到大量關(guān)于這部分內(nèi)容的相關(guān)說明瘟栖。因此葵擎,我們將直接講解如何使用 Flink。
為了更好的融入Flink半哟,以及更好的接受這個學(xué)習(xí)過程酬滤,我們將在各種實例中穿插講解相關(guān)必要的知識點。因此寓涨,在講解各種專業(yè)概念之前盯串,先開始準(zhǔn)備部署一套Flink集群吧。
1.1 選擇并下載 Flink 安裝包
本系列教程將使用 Apache 編譯好的 Flink 軟件包進(jìn)行安裝戒良。如有需要体捏,后期也會整理如何針對不同的需求對 Flink 源碼進(jìn)行修改與編譯。
1.1.1 重大 Flink 版本介紹
下面將簡單介紹幾個(截止到2019年07月)最主流的糯崎、被使用的Flink版本几缭。這部分內(nèi)容暫且作為了解即可,后續(xù)會慢慢展開介紹沃呢。
1. Apache Flink 1.6.4
Flink 1.6.4 是 Flink 1.6.x 系列版本的第 4 次修訂版年栓,x所代表的數(shù)字一般代表小版本的變動,主要修復(fù)一些已知的重要的BUG薄霜。包括基于YARN運行Job時容器分配不均某抓、連接器無法正常連接、監(jiān)控指標(biāo)異常等惰瓜。
另外還更新了部分 Maven 依賴如下:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_2.11</artifactId>
<version>1.6.4</version>
</dependency>
Flink 1.6.4 是 Flink 1.6.x 中最穩(wěn)定的版本否副,很多大型企業(yè)會根據(jù)1.6.4的Flink版本進(jìn)行定制修改,或業(yè)務(wù)開發(fā)崎坊。
2. Apache Flink 1.7.2
在 Flink 1.7.x 系列相比于 Flink 1.6.x 系列备禀,修復(fù)了420多個已知問題,并增加很多功能流强,其中最值得關(guān)注的幾個重要內(nèi)容如下:
- 支持 Scala 2.12 API
- 支持寫入數(shù)據(jù)到亞馬遜 S3 系統(tǒng)
- 支持處理流式數(shù)據(jù)時痹届,在 SQL 中使用 MATCH_RECOGNIZE 語法
- 支持時態(tài)表(特殊的維度表)以及時態(tài)表和流式數(shù)據(jù)的 JOIN 操作
- 支持通過文件定義 SQL 視圖(通過SQL CLI),即通過類似SQL的語法生成Flink Job
- 支持 Kafka 2.0 Connector打月,并能夠?qū)崿F(xiàn) EXACTLY_ONCE 語義
在此基礎(chǔ)之上,F(xiàn)link 1.7.2 版本相比于 Flink 1.7.0 又修復(fù)了 40 多個已知問題蚕捉,并同樣更新部分 Maven 依賴如下:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_2.11</artifactId>
<version>1.7.2</version>
</dependency>
3. Apache Flink 1.8.1
在 Flink 1.8.x 系列相比于 Flink 1.7.x 系列奏篙,增加的最值得關(guān)注的幾個重要內(nèi)容如下:
- 支持連續(xù)清理數(shù)據(jù)分析過程中產(chǎn)生的狀態(tài)數(shù)據(jù)
- 支持過濾 Kafka 恢復(fù)的分區(qū)
- 解綁 Flink 軟件包與 Hadoop 二進(jìn)制包
其中 Flink 1.8.1 變更的 Maven 依賴如下:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_2.11</artifactId>
<version>1.8.1</version>
</dependency>
并且,原先依賴 flink-table 的開發(fā)者需要轉(zhuǎn)向于依賴 flink-table-planner 與 flink-table-api-java-bridge(Java API) 或 flink-table-api-scala-bridge(Scala API)。
額外補充:Flink 1.9.0 的 snapshot 版本已經(jīng)出爐秘通,目前并非穩(wěn)定版本为严,因此暫且不做過多介紹。
1.1.2 下載指定的Flink版本
下面列出了上述各個主流 Flink 版本的下載地址肺稀,讀者也可自行前往官網(wǎng)進(jìn)行下載第股。
- Flink 1.6.4-scala_2.11 with hadoop 2.7
- Flink 1.7.2-scala_2.11 with hadoop 2.7
- Flink 1.8.1-scala_2.11
本系列教程將直接使用最新穩(wěn)定版 Flink 1.8.1 版本作為實例進(jìn)行演繹操作。
下載完成后话原,得到名為 flink-1.8.1-bin-scala_2.11.tgz 的壓縮包夕吻。
1.1.3 下載指定的Hadoop依賴
在使用Flink的情景中,如果涉及到對 Hadoop 組件的操作繁仁,則需要下載對應(yīng)的jar包涉馅。
以 Flink 1.8.1、Hadoop 2.7.x 為例黄虱,下載完成 Flink 壓縮包后稚矿,繼續(xù) Hadoop 依賴包,鏈接如下:
下載完成后捻浦,得到名為 flink-shaded-hadoop-2-uber-2.7.5-7.0.jar 的依賴包晤揣。
1.2 確認(rèn)現(xiàn)有的集群環(huán)境
在開始安裝 Flink 之前,先來確認(rèn)一下筆者目前所使用的安裝環(huán)境朱灿。
1.2.1 Linux版本與環(huán)境篩查
-
虛擬機的配置項
表1-1 列出了三臺虛擬機的核心配置碉渡。這是目前最關(guān)心的幾項內(nèi)容,不再詳述其余配置項母剥。
提示:3 臺虛擬機的配置均為CentOS 6.8 版本滞诺,其與 CentOS 7.x 系列版本的使用方式大同小異,對于操作Flink而言并無分別环疼。如果讀者想體驗更新的CentOS系統(tǒng)习霹,自行切換即可。
- 表1-1 虛擬機的核心配置項
配置項 | linux01 (第一臺虛擬機) | linux02 (第二臺虛擬機) | linux03 (第三臺虛擬機) |
---|---|---|---|
內(nèi)存 | 4 GB | 2 GB | 2 GB |
CPU內(nèi)核數(shù) | 2 | 1 | 1 |
硬盤 | 50 GB | 50 GB | 50 GB |
網(wǎng)絡(luò)適配器 | NAT | NAT | NAT |
-
禁用SELinux
分布式框架在進(jìn)行端口通信時炫隶,SELinux 有可能阻塞其中的通信淋叶,因此暫且將其禁用。 在 CentOS 6.8 中伪阶,使用如下命令編輯 SELinux 配置文件:
# vi /etc/sysconfig/selinux00000
并將 SELINUX 選項改為: SELINUX:disable
然后保存退出即可煞檩。 -
關(guān)閉防火墻
防火墻也可以導(dǎo)致分布式框架之間的通信被拒絕昏兆,因此暫且關(guān)閉防火墻雌续。
在 CentOS 6.8 系統(tǒng)中,使用如下命令關(guān)閉 iptables 防火墻:
# service iptables stop # chkconfig iptables off
提示:在 CentOS 7.x 系統(tǒng)中辑甜,用 firewalld 替代了 iptables檐薯。關(guān)閉防火墻的命令如下:
# systemctl stop firewalld.service # systemctl disable firewalld.service
-
配置網(wǎng)卡文件
為了能夠在 Windows 中通過 SSH 終端遠(yuǎn)程控制虛擬機凝赛,并實現(xiàn)分布式框架之間的通信注暗,需
要修改虛擬機的網(wǎng)卡文件。
在 CentOS 6.8 中編輯網(wǎng)卡配置文件的命令如下:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
編輯內(nèi)容如下:
# 當(dāng)前虛擬機的 IP 地址墓猎,前三段與網(wǎng)關(guān)地址一致 IPADDR=192.168.216.20 # 固定的子網(wǎng)掩碼地址 NETMASK=255.255.255.0 # 網(wǎng)關(guān)地址捆昏,需要與虛擬機 NAT 設(shè)置中的網(wǎng)關(guān)的 IP 地址一致 GATEWAY=192.168.216.2 # 首選 DNS,設(shè)置為網(wǎng)關(guān)的 IP 地址即可 DNS1=192.168.216.2 # 備選 DNS毙沾,設(shè)置為如下即可 DNS2=8.8.8.8 # 設(shè)置為靜態(tài)配置 IP 地址的模式 BOOTPROTO=static # 是否開機自動啟動網(wǎng)卡 ONBOOT=yes
編輯完成后骗卜,執(zhí)行以下命令重啟網(wǎng)卡:
# service network restart
配置其余兩臺虛擬機網(wǎng)卡的過程與上述內(nèi)容基本一致,只需要修改 IPADDR 中 IP 地址的最 后一段左胞,使其不與其他虛擬機重復(fù)即可寇仓。
-
修改 IP 地址與主機名的映射關(guān)系
在 CentOS 6.8 中編輯 network 文件的命令如下:
# vi /etc/sysconfig/network
在本例中,將其修改為如下內(nèi)容:
192.168.128.20 linux01 192.168.128.21 linux02 192.168.128.22 linux03
-
實現(xiàn) 3 臺虛擬機之間的無秘鑰訪問
集群中各虛擬機之間需要通過 SSH 協(xié)議進(jìn)行無秘鑰訪問罩句。在配置時請注意焚刺,每臺虛擬機都可以通過 SSH 協(xié)議無秘鑰訪問本機。 讀者可根據(jù)如下步驟快速實現(xiàn)無秘鑰訪問门烂。
下面以第 1 臺虛擬機上的操作為例乳愉。 首先,執(zhí)行以下命令生成秘鑰:
$ ssh-keygen -t rsa
然后屯远,分發(fā)公鑰至 3 臺虛擬機蔓姚,執(zhí)行命令如下:
$ ssh-copy-id linux01; ssh-copy-id linux02; ssh-copy-id linux03;
其他兩臺虛擬機重復(fù)執(zhí)行上述兩個步驟即可。
-
配置 Java 環(huán)境變量
本教程采用的 Java 環(huán)境是 JDK 1.8 版本慨丐,如果讀者使用了低于此版本的 JDK坡脐,請自行更換, 并在 Linux 的系統(tǒng)變量與用戶變量中配置 JDK房揭。
配置樣例如下:
JAVA_HOME=/home/admin/modules/jdk1.8.0_121 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/ lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
此處省略JDK下載與安裝的步驟备闲。
1.2.2 已部署的 Hadoop 相關(guān)節(jié)點
在生產(chǎn)環(huán)境中,大多情況會下捅暴,F(xiàn)link會與Hadoop相關(guān)服務(wù)配合使用恬砂,因此在搭建Flink集群之前,最好已經(jīng)完成Hadoop相關(guān)的服務(wù)部署蓬痒。
表1-2 中列舉了虛擬機中已經(jīng)部署的框架服務(wù)泻骤。
- 表1-2 已部署的框架服務(wù)
框架類別 | linux01(第一臺虛擬機) | linux02(第二臺虛擬機) | linux03(第三臺虛擬機) |
---|---|---|---|
HDFS(Hadoop 2.7.2) | NameNode、DataNode | DataNode | DataNode梧奢、SecondaryNameNode |
YARN-MR(Hadoop 2.7.2) | NodeManager狱掂、JobHistoryServer | ResourceManager、NodeManager | NodeManager |
Zookeeper | QuorumPeerMain | QuorumPeerMain | QuorumPeerMain |
讀者可以參考作者簡書中的Hadoop相關(guān)文章完成部署亲轨。如有需要趋惨,也可私信索取并下載 3 臺已經(jīng)完成上述部署配置的虛擬機進(jìn)行使用。
1.4 本章小結(jié)
本章簡單介紹了Flink多個版本之間的重要區(qū)別瓶埋,并羅列了稍后搭建Flink集群需要使用的虛擬機環(huán)境希柿。在下一章中诊沪,將詳細(xì)演示如何基于不同模式搭建Flink集群养筒。