准备工作
因为在编译时需要下载许多依赖包,在执行编译前最好先配置下代理仓库
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
编译flink-shaded
因为flink依赖flink-shaded工程,基本的依赖项都是在这个工程里面定义的,所以要先编译这个工程
-
下载flink-shaded工程flink-shaded
-
在写文章时,最新的release版本是8.0,里面用的hadoop及zookeeper对应版本如下
<properties> <avro.version>1.8.2</avro.version> <slf4j.version>1.7.15</slf4j.version> <log4j.version>1.2.17</log4j.version> <hadoop.version>2.4.1</hadoop.version> <zookeeper.version>3.4.10</zookeeper.version> <findbugs.version>1.3.9</findbugs.version> </properties>
-
将hadoop和zk改成自己CDH6.2.0对应的版本,修改flink-shaded-hadoop-2工程的pom文件
<properties> <avro.version>1.8.2</avro.version> <slf4j.version>1.7.15</slf4j.version> <log4j.version>1.2.17</log4j.version> <hadoop.version>3.0.0</hadoop.version> <zookeeper.version>3.4.5</zookeeper.version> <findbugs.version>1.3.9</findbugs.version> </properties>
-
修改编译后的版本号
- 设置/Users/chengaofeng/git/flink-shaded/tools/releasing/update_branch_version.sh 工程中的OLD_VERSION=8.0和NEW_VERSION=9.0
- 在tools目录下执行 sh releasing/update_branch_version.sh 命令
-
修改flink-shaded-hadoop-2和flink-shaded-hadoop-2-uber工程中依赖的外部变量名称
<artifactId>flink-shaded-hadoop-2-uber</artifactId> <name>flink-shaded-hadoop-2-uber</name> <packaging>jar</packaging> <version>${hadoop.version}-9.0</version>
<artifactId>flink-shaded-hadoop-2</artifactId> <name>flink-shaded-hadoop-2</name> <packaging>jar</packaging> <version>${hadoop.version}-9.0</version>
-
进入flink-shaded目录执行编译
mvn clean install -DskipTests -Drat.skip=true -Pvendor-repos -Dhadoop.version.cdh=3.0.0
效果图
编译flink
-
下载源码flink
-
写文章时最新的release版本是1.9,所以下载1.9版本的代码
-
修改对应的hadoop和flink.shaded.version值为我们需要的值
<hadoop.version>3.0.0</hadoop.version> ... <flink.shaded.version.old>7.0</flink.shaded.version.old> <flink.shaded.version>9.0</flink.shaded.version> ... <hivemetastore.hadoop.version>3.0.0</hivemetastore.hadoop.version>
因为只想更新hadoop的版本,所以依赖的其他flink-shaded版本不做变更,以下jackson举例说明,还是用旧的版本(用最新的编译没有编译过)
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-shaded-jackson</artifactId> <version>${jackson.version}-${flink.shaded.version.old}</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-shaded-jackson-module-jsonSchema</artifactId> <version>${jackson.version}-${flink.shaded.version.old}</version> </dependency>
-
修改flink-connectors/flink-hbase中依赖的hbase版本号
<properties> <hbase.version>2.1.2</hbase.version> </properties>
之后需要修改这个工程中的AbstractTableInputFormat.java,TableInputFormat.java以及junit中的编译错误
-
修改版本号
修改tools/change-version.sh中新旧版本号OLD="1.9-SNAPSHOT" NEW="1.9-H3"
-
执行脚本change-version.sh
-
注释掉不需要编译的工程,因为这个编译太耗时间,可以把测试相关的包去掉
-
执行编译
mvn clean install -DskipTests -Pvendor-repos -Drat.skip=true -Pinclude-hadoop
-
编译结果
-
在工程中使用新编译出的版本
<properties> <flink.version>1.9-H3</flink.version> </properties>
对应修改后的代码地址github 版本:release-1.9