Flink源码编译(Windows环境下编译)

第1章 下载flink源码

Flink因为阿里的加入,对国内IT人员变得越来越友好了,官网也出了中文版,也有很多中文文档了。

官网:

https://flink.apache.org/

https://flink.apache.org/zh/

或者安装git后去github上拉取源码。

github:

https://github.com/apache/flink

第2章 准备环境

2.1.Jdk

jdk1.8.0

2.2.Maven

maven-3.2.5

2.3.Git

Git-2.27.0

2.4.Node.js

node-v12.0.0

注:笔者在windows环境下编译时出现问题才单独安装了node.js,linux下笔者尝试确实不用单独安装,macos系统据说不用安装,仅供参考

2.5.Flink

flink-1.11.0

第3章 配置仓库路径

这里把我最终编译成功的两个关键的配置文件附上,仅供参考。

{用户}/.m2/settings.xml

<mirrors>
	<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>
</mirrors>

flink-1.11.0/flink-runtime-web/pom.xml

<plugin>
	<groupId>com.github.eirslett</groupId>
	<artifactId>frontend-maven-plugin</artifactId>
	<version>1.6</version>
	<executions>
		<execution>
			<id>install node and npm</id>
			<goals>
				<goal>install-node-and-npm</goal>
			</goals>
			<configuration>
				<nodeDownloadRoot>https://registry.npm.taobao.org/dist/</nodeDownloadRoot>
				<npmDownloadRoot>https://registry.npmjs.org/npm/-/</npmDownloadRoot>
				<nodeVersion>v12.0.0</nodeVersion>
			</configuration>
		</execution>
		<execution>
			<id>npm install</id>
			<goals>
				<goal>npm</goal>
			</goals>
			<configuration>
				<arguments>install -g -registry=https://registry.npm.taobao.org --cache-max=0 --no-save </arguments>
				<environmentVariables>
					<HUSKY_SKIP_INSTALL>true</HUSKY_SKIP_INSTALL>
				</environmentVariables>
			</configuration>
		</execution>
		<execution>
			<id>npm run build</id>
			<goals>
				<goal>npm</goal>
			</goals>
			<configuration>
				<arguments>run build</arguments>
				<npmRegistryURL>https://registry.npm.taobao.org</npmRegistryURL>
			</configuration>
		</execution>
	</executions>
	<configuration>
		<workingDirectory>web-dashboard</workingDirectory>
	</configuration>
</plugin>

第4章 编译命令

自动使用pom里面的hadoop版本去编译,但是一般情况下,我们都会有自己指定的版本,所以一般不用这个

# 删除已有的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.0
# 或者
mvn clean package -DskipTests -Dhadoop.version=2.6.1

maven 编译的时候跳过测试代码、javadoc 和代码风格检查,这样可以减少不少时间。

-Dmaven.javadoc.skip=true -Dcheckstyle.skip=true

笔者最后决定用的命令是:

mvn clean install -DskipTests -Dhadoop.version=3.1.2

编译成功后,编译出完整的flink-binary,在源码目录flink-dist/target/中:

注:据说Linux、MacOS为了方便使用,编译时会为flink binary目录在flink当前code path下建立一个名为build-target的软链接。

第5章 执行编译和问题解决

mvn clean install -DskipTests -Dhadoop.version=3.1.2

 发生如下ERROR

认证问题,笔者在Centos下编译没有发生,可能与我用windos系统进行编译有关,这里解决办法时暂时跳过认证。

解决办法:

增加 -Drat.skip=true 参数 ,跳过认证检查,重新执行如下命令。

mvn clean install -DskipTests -Dhadoop.version=3.1.2 -Drat.skip=true

出现新的ERROR

注意这里开始进入flink-runtime-web这个项目,这个项目用到了node.js的一些东西,由于国外部分网址被禁,这里编译会出现各种问题,后面几步,笔者决定先单独编译flink-runtime-web,这个项目成功后再编译其他的项目,笔者只记录自己发生的问题,和解决的办法,仅供大家参考。

提示很明显,Node.js的安装包Download不下来。看了下本地仓库,确实下载半天,下载不动,一直是1kb。

解决办法

笔者手动下载后放到文件夹内,重新执行编译命令,这里提供一个淘宝的nodejs镜像仓库https://npm.taobao.org/mirrors/node

出现新的ERROR,关键字 Running 'npm ci --cache-max=0 --no-save'

这个错误提示看flink-runtime-web的pom.xml文件,时开始执行npm install了,跟node.js相关的东西,这里flink的仪表板用到了node.js,从错误来看像是npm命令执行install的错误,也或者是权限访问问题。

这里查找了一些资料,可能是安装仓库的地址问题,把flink-runtime-web的pom.xml文件做如下修改:

<execution>
	<id>npm install</id>
	<goals>
		<goal>npm</goal>
	</goals>
	<configuration>
		<arguments>install -g -registry=https://registry.npm.taobao.org --cache-max=0 --no-save</arguments>
		<environmentVariables>
			<HUSKY_SKIP_INSTALL>true</HUSKY_SKIP_INSTALL>
		</environmentVariables>
	</configuration>
</execution>

再重新执行编译命令

出现新的ERROR,关键字npm run build

这里看到已经运行到build了,继续修改build的仓库地址尝试

<execution>
    <id>npm run build</id>
    <goals>
        <goal>npm</goal>
    </goals>
    <configuration>
        <arguments>run build</arguments>
        <npmRegistryURL>https://registry.npm.taobao.org</npmRegistryURL>
    </configuration>
</execution>

重新执行命令

出现新的ERROR

仔细看错误信息'ng' 不是内部或外部命令,也不是可运行的程序,这里已经开始执行build了,刚好是flink-runtime-web下package.json下第7行的build代码。

于是笔者决定直接装上node.js,将node、npm、ng工具都装好,并配置好npm和node的环境变量,同事安装好ng命令

安装ng命令:

npm install -g @angular/cli

 

安装配置好后,再重新编译,BUT

还是ERROR

这里看到,提示node.js版本低了,好吧,升级。笔者按提示升级到v12.0.0(到这里发现错误越来越清晰了,离SUCCESS应该不远了

BUT,还是出现了新的ERROR

根据提示信息,查看log

找不到模块,继续安装这个模块

到flink-runtime-web目录D:\flink-1.11.0\flink-runtime-web\web-dashboard\node_modules\@angular\cli路径下执行命令:

npm install -save-dev @angular-devkit/build-angular

执行完后这个module就会产生。再重新编译

这个flink-runtime-web总算是SUCCESS了。

但是这里注意,这一步花了很久的时间,虽然成功了,但这里到最后CPU爆满了,结尾出现了一个Java heap的错误(可以尝试修改maven的jvm参数重试,笔者在另外一台内存较大的Win7电脑下尝试了重新编译,不会有这个错误)

这里显示flink-runtime-web项目已经成功(笔者最后拿到Centos上安装运行,flink的web-dashboard可用,确认没有问题。)

总算是BUILD SUCCESS了,注意这一步会花很久的时间,到这里flink-runtime-web这个工程算是顺利编译通过了。

接下来,咱们开始编译整个Flink工程,不想再花时间编译flink-runtime-web的同学,可以到主目录下pom.xml中注释掉flink-runtime-web的moudle

<!-- <module>flink-runtime-web</module> -->

然后执行命令重新编译,这里为了加快时间,我更换了命令

mvn clean install -DskipTests -Dhadoop.version=3.1.2 -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Drat.skip=true

新的ERROR

这里原因是找不到kafka-schema-registry-client-4.1.0.jar

这里可以自己单独下载下来安装。

http://packages.confluent.io/maven/io/confluent/kafka-schema-registry-client/4.1.0/kafka-schema-registry-client-4.1.0.jar

到上面这个地址进行下载,然后到文件所在目录执行命令进行安装

mvn install:install-file -DgroupId=io.confluent -DartifactId=kafka-schema-registry-client -Dversion=4.1.0 -Dpackaging=jar -Dfile=kafka-schema-registry-client-4.1.0.jar

然后,再重新编译:

全部SUCCESS

编译后的文件在flink-dist\target

笔者编译的包下载地址:Flink-1.11.0源码手动编译包

编译的时候会遇到各种问题,笔者再flink-runtime-web下花了大量的时间,重点是大部分是国内网络隔离了,导致各种包下载不下来。最好还是翻墙,并linux或者MacOS下进行编译。宗旨就是根据自己的编译情况,观察自己的实际的错误信息,一个一个进行解决。

猜你喜欢

转载自blog.csdn.net/dzh284616172/article/details/107571972