Flink 是一個以 Java 及 Scala 做爲開發語言的開源大數據項目,代碼開源在 github 上,並使用 maven 來編譯和構建項目。對於大部分開發或使用 Flink 的同窗來講,Java、Maven 和 Git 這三 個工具是必不可少的,所以首先須要把這三個工具進行安裝和配置。另外,一個強大的 IDE 有助於咱們更快的閱讀代碼、開發新功能以及修復 bug,所以這裏也會簡單介紹 IDE 的相關 配置。java
Git工具安裝配置完成後,咱們就能夠從 github 上下載 Flink 代碼了。github 上 flink 的代碼倉庫是github.com/apache/flin…node
(可選)對於國內的用戶,下載 github 上的代碼可能比較慢,能夠在/etc/hosts 中增長以下配置, 能夠顯著提高 github 的下載速度:git
151.101.72.133 assets-cdn.github.com
151.101.73.194 github.global.ssl.fastly.net
192.30.253.113 github.com
11.238.159.92 git.node5.mirror.et2sqa
複製代碼
若是使用 Windows 系統,則是配置在「C:\Windows\System32\drivers\etc\hosts」文件中。github
若是使用 Win10 Linux 子系統,建議也配置在「C:\Windows\System32\drivers\etc\hosts」文件中, 而後重啓 Linux 子系統,由於 Linux 子系統中的/etc/hosts 文件是根據 Window 系統中的「C:\Windows\System32\drivers\etc\hosts」這個文件生成的。web
使用 Win10 Linux 子系統還能夠經過刪除 Linux 子系統的/etc/hosts 文件中的這一行來阻止 Linux 子系統啓動的時候覆蓋修改過的 hosts 文件:apache
# This file was automatically generated by WSL. To prevent automatic generation of this file, remove this line.
複製代碼
下載 Flink 代碼到本地bash
git clone https://github.com/apache/flink.git
複製代碼
(可選)代碼下載完後,默認是在 master 分支,考慮到代碼質量,通常會選擇合適的發佈分支 使用,好比 release-1.7 或者 release-1.8。app
git checkout release-1.7
git checkout release-1.8
複製代碼
Flink 代碼使用 maven 構建項目,編譯代碼的時候 maven 默認會根據當前用戶下的 「~/.m2/settings.xml」文件中的配置信息下載 Flink 的依賴包,也能夠在 mvn 命令中增長「-- settings=${your_maven_settings_file}」來指定 maven settings 文件的位置。 若是你以前已有合適的 maven settings 的配置,能夠直接使用已有的配置即maven
若是須要指定 maven 的 local repository 的路徑,能夠在 settings.xml 文件中配置 「localRepository」這個參數。默認狀況下會下載到「~/.m2/repository/」(即當前用戶 home 目錄下 的「.m2/repository」目錄)。ide
重要的配置片斷以下所示。
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*,!jeecg,!jeecg-snapshots,!mapr-releases</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>mapr-public</id>
<mirrorOf>mapr-releases</mirrorOf>
<name>mapr-releases</name>
<url>https://maven.aliyun.com/repository/mapr-public</url>
</mirror>
複製代碼
簡要說明一下,第一個 mirror 使用的是 aliyun 提供的 maven 鏡像倉庫,可以爲國內用戶加速 maven repository 的訪問,你也能夠配置成國內其餘的 maven 鏡像倉庫或者本身搭建的倉庫。最 重要的是下面片斷中紅色標註的內容。因爲 flink 中的 flink-filesystems/flink-mapr-fs 模塊依賴 mapr-releases repository 提供的 jar 包,然而因爲國內訪問 mapr-releases repository 比較慢,而 且所依賴的 maprfs-5.2.1-mapr.jar 這個 jar 包有 48MB,flink 依賴中最大的一個 jar 包,故初次編譯 flink 時,每每會因爲下載 mapr 相關依賴超時致使編譯失敗。所以,aliyun 專門有一個鏡像倉庫代理 mapr-releases repository,以指望能讓用戶更容易地下載 mapr 相關的 jar 包。 能夠經過這個連接查看 aliyun 提供的鏡像倉庫的 meta 信息:maven.aliyun.com/mvn/view
在咱們配置好以前的幾個工具後,編譯 flink 就很是簡單了,執行以下命令便可:
# 刪除已有的 build,編譯 flink binary
# 接着把 flink binary 安裝在 maven 的 local repository(默認是~/.m2/repository)中
mvn clean install -DskipTests
# 另外一種編譯命令,相對於上面這個命令,主要的確保是:
# 不編譯 tests、QA plugins 和 JavaDocs,所以編譯要更快一些
mvn clean install -DskipTests -Dfast
複製代碼
另外,在一些狀況下,咱們可能並不想把編譯後的 flink binary 安裝在 maven 的 local repository 下,咱們可使用下面的命令:
# 刪除已有的 build,編譯 flink binary
mvn clean package -DskipTests
# 另外一種編譯命令,相對於上面這個命令,主要的確保是:
# 不編譯 tests、QA plugins 和 JavaDocs,所以編譯要更快一些
mvn clean package -DskipTests -Dfast
複製代碼
若是你須要使用指定 hadoop 的版本,能夠經過指定「-Dhadoop.version」來設置,編譯命令以下:
mvn clean install -DskipTests -Dhadoop.version=2.6.1
# 或者 mvn
clean package -DskipTests -Dhadoop.version=2.6.1
複製代碼
當成功編譯完成後,上述幾種編譯方式最終都能在當前 flink 的 code path 下編譯出完整的 flink binary,能夠在 flink-dist/target/目錄中看到:
在編譯中可能遇到的問題
這種錯誤通常都和 mapr 相關的依賴包的下載失敗有關,在實際測試時,即便配置了以前說的 aliyun 代理的 mapr-releases 鏡像,仍是可能出現下載失敗的狀況,問題可能仍是和 mapr 的 jar 包比較大,容易下載失敗有關。 遇到這些問題時,重試便可。在重試以前,要先根據失敗信息刪除 maven local repository 中對應 的目錄,不然須要等待 maven 下載的超時時間才能再次出發下載依賴到本地。
好比下面這個編譯失敗:
失敗信息顯示 com.mapr.hadoop:maprfs:jar:5.2.1-mapr 和它依賴的 org.apache.hadoop:hadoopauth:jar:2.7.0-mapr-1703 有問題,就直接把這兩個包對應在 maven local repository 中的目錄刪 掉,而後從新編譯便可。
rm -rf ~/.m2/repository/com/mapr/hadoop/maprfs/5.2.1-mapr
rm -rf ~/.m2/repository/org/apache/hadoop/hadoop-auth/2.7.0-mapr-1703
複製代碼
我還遇到過上面這種狀況,直接刪除 maprfs 的 jar 包後重試便可。
rm -rf ~/.m2/repository/com/mapr/hadoop/maprfs/5.2.1-mapr
複製代碼
這些問題等到編譯成功後,相關的 mapr 的 jar 包就保存在本地的 local repository 目錄下了,以後的編譯就沒問題了。
我在 Win10 的 Linux 子系統中編譯 flink 發現,編譯 flink-runtime-web 過程當中執行「ng build --prod --base-href ./」命令很是慢,最後雖然編譯過了,但差很少花了一個小時的時間。
單獨執行「ng build --prod --base-href ./」這個命令時,會長時間停留在「92% chunk asset optimization」處。不肯定是否和 Linux 子系統有關,也可能和個人 Win10 機器的內存比較少有關 (個人 Win10 機器編譯以前的剩餘內存只有 3GB 左右,執行這個 ng 命令比較耗內存,整機內存 差很少用完了)。這個問題目前沒有結論,有興趣和條件的同窗,也能夠試一試。
一個好的 IDE 不只能有效的提升開發者的開發效率,並且對於不作代碼開發可是但願經過代碼學 習 Flink 的人來講,也很是有助於其對代碼的理解。
推薦使用 IntelliJ IDEA IDE 做爲 Flink 的 IDE 工具。官方的說法是,不建議使用 Eclipse IDE,主 要緣由是 Eclipse 的 Scala IDE 和 Flink 用 scala 的不兼容。
(1)下載安裝 Intellij IDEA,Intellij IDEA IDE 的下載地址:www.jetbrains.com/idea/,下載最新版…
(2)安裝 Scala plugin, Flink 項目使用了 Java 和 Scala 開發,Intellij 自帶 Java 的支持,在導入 Flink 代碼前,還須要確 保安裝 Intellij 的 Scala plugin。安裝方法以下:
(3)檢查 Intellij 的 Maven 配置
IntelliJ IDEA -> Preferences -> Build, Execution, Deployment -> Build Tools -> Maven
檢查「Maven home directory」是否符合預期,若是不是,則選擇正確的 maven 路徑,而後 apply
檢查「User settings file」是否符合預期,默認是「${your_home_dir}/.m2/settings.xml」,若是 以前沒有特殊配置,則無需更改
檢查「Local directory」是否符合預期,默認是「${your_home_dir}/.m2/repository」,若是以前 沒有特殊配置,則無需更改
(4)導入 Flink 代碼
PS:代碼導入完後,Intellij 會自動 sync 代碼並建立 index 用於代碼查找。若是以前代碼沒有編 譯過,則須要作一次代碼全編譯,而後 Intellij 通過一次 sync 後,就能這樣 Intellij 就能識別全部 的代碼。
(5)添加 Java 的 Checkstyle
在 Intellij 中添加 Checkstyle 是很重要的,由於 Flink 在編譯時會強制代碼風格的檢查,若是代碼 風格不符合規範,可能會直接編譯失敗。對於須要在開源代碼基礎上作二次開發的同窗,或者有 志於向社區貢獻代碼的同窗來講,及早添加 checkstyle 並注意代碼規範,能幫你節省沒必要要的修 改代碼格式的時間。
Intellij 內置對 Checkstyle 的支持,能夠檢查一下 Checkstyle-IDEA plugin 是否安裝(IntelliJ IDEA -> Preferences -> Plugins,搜索「Checkstyle-IDEA」)。
配置 Java Checkstyle:
a. 「Description」填「Flink」 b. 「Use a local Checkstyle file」選擇本代碼下的 tools/maven/checkstyle.xml 文件 c. 勾選「Store relative to project location」,而後點擊「Next」 d. 配置「checkstyle.suppressions.file」 的值爲"suppressions.xml",而後點擊「Next」和 「Finish」 e. 勾選上「Flink」做爲惟一輩子效的 checkstyle 配置,點擊「Apply」和「OK
須要說明的是,Flink 中的一些模塊並不能徹底 checkstyle 經過,包括 flink-core、flink-optimizer 和 flink-runtime。但不管如何,仍是應當保證你新增或修改的代碼遵照 checkstyle 的規範。
(6)添加 Scala 的 Checkstyle
(7)小試牛刀:在 Intellij 中運行 example
flink 代碼編譯完成後,直接選擇一個 example 便可運行,如: org.apache.flink.streaming.examples.windowing.WindowWordCount.java