构建环境
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