構建環境
JDK1.8
以上和Maven 3.3.x
可以構建Flink
,但是不能正確地遮蓋某些依賴項。Maven 3.2.5
會正確創建庫。所以這里使用為了減少問題選擇 Maven3.2.5
版本進行構建。要構建單元測試,請使用Java 8
以上,以防止使用PowerMock
運行器的單元測試失敗。
克隆 Git 倉庫
我們可以從github
上下載Flink
代碼了。github
上flink
的代碼倉庫鏈接。國內鏡像地址鏈接。
git clone https://gitee.com/mirrors/apache-flink.git
注意下載的時候可能會出現如下問題:
fatal: bad config value for 'http.postbuffer' in /root/.gitconfig
解決方案是修改git
默認的緩存大小(500M)
git config --global http.postBuffer 524288000
Maven 配置
mirrors
標簽中添加如下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
包。
<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><id>confluent</id><mirrorOf>confluent</mirrorOf><name>confluent</name><url>http://packages.confluent.io/maven</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>
可以通過這個鏈接查看aliyun
提供的鏡像倉庫的meta
信息:https://maven.aliyun.com/mvn/view
獲取 Git分支
查看 Git遠程分支,我們選擇當前次新的1.8?
git branch -r
源碼切換到1.8
分支
git checkout release-1.8
Maven 編譯
常用命令,建議使用此命令,不編譯tests
的,否則你會遇到bink
編譯問題。
mvn clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true
刪除已有的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
問題及解決
問題如下,Could not resolve dependencies for project flink-runtime_2.11:jar:1.8-SNAPSHOT
,類似這種依賴問題。
[ERROR] Failed to execute goal on project flink-s3-fs-hadoop: Could not resolve dependencies for project org.apache.flink:flink-s3-fs-hadoop:jar:1.8-SNAPSHOT: Could not find artifact org.apache.flink:flink-fs-hadoop-shaded:jar:tests:1.8-SNAPSHOT in nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public) -> [Help 1]
解決方案,在下載對應的Jar
包鏈接,并執行如下命令進行安裝
[root@hadoop1 apache-flink]# mvn install:install-file -DgroupId=org.apache.flink -DartifactId=flink-s3-fs-hadoop -Dversion=1.8-SNAPSHOT -Dpackaging=jar -Dfile=/usr/local/myjar/flink-s3-fs-hadoop-1.8.0.jar
當成功編譯完成后,上述幾種編譯方式最終都能在當前flink
的code path
下編譯出完整的flink binary
,可以在flink-dist/target/
目錄中看到:
【1】flink binary
目錄,本例中是flink-dist/target/flink-1.5.1-bin/flink-1.5.1
【2】flink binary
目錄的壓縮包,本例中是flink-dist/target/flink-1.5.1.tar.gz
【3】包含flink
核心功能的jar
包,本例中是flink-dist/target/flink-dist_2.11-1.5.1.jar