编译 Flink代码

构建环境

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 包。

 1 <mirror>
 2     <id>nexus-aliyun</id>
 3     <mirrorOf>*,!jeecg,!jeecg-snapshots,!mapr-releases</mirrorOf>
 4     <name>Nexus aliyun</name>
 5     <url>http://maven.aliyun.com/nexus/content/groups/public</url>
 6 </mirror>
 7 <mirror>
 8     <id>mapr-public</id>
 9     <mirrorOf>mapr-releases</mirrorOf>
10     <name>mapr-releases</name>
11     <url>https://maven.aliyun.com/repository/mapr-public</url>
12 </mirror>
13 <mirror>
14     <id>confluent</id>
15     <mirrorOf>confluent</mirrorOf>
16     <name>confluent</name>
17     <url>http://packages.confluent.io/maven</url>
18 </mirror>
19 <mirror>
20     <id>mapr-public</id>
21     <mirrorOf>mapr-releases</mirrorOf>
22     <name>mapr-releases</name>
23     <url>https://maven.aliyun.com/repository/mapr-public</url>
24 </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下,我们可以使用下面的命令:

1 # 删除已有的 build,编译 flink binary
2 mvn clean package -DskipTests
3 # 另一种编译命令,相对于上面这个命令,主要的确保是:
4 # 不编译 tests、QA plugins 和 JavaDocs,因此编译要更快一些
5 mvn clean package -DskipTests -Dfast

 如果你需要使用指定 hadoop 的版本,可以通过指定“-Dhadoop.version”来设置,编译命令如下:

1 mvn clean install -DskipTests -Dhadoop.version=2.6.1
2 # 或者
3 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

posted @ 2020-11-21 20:05  Java程序员进阶  阅读(19)  评论(0编辑  收藏  举报