Flink 使用介绍相关文档目录
背景
Flink 1.13.2版本在ARM架构Linux系统上运行,如果启用了rocksdb state backend,会出现架构不兼容异常。原因是Flink中的frocksdbjni并非使用Java编写,没有提供ARM支持。本篇为大家带来编译arm版本的frocksdbjni的方式。
编译环境
CentOS 7.4
查看Flink的frocksdbjni版本
以Flink 1.13.2版本为例。查看flink-state-backends/flink-statebackend-rocksdb/pom.xml
。
<dependency>
<groupId>com.ververica</groupId>
<artifactId>frocksdbjni</artifactId>
<version>5.17.2-ververica-2.1</version>
</dependency>
说明使用的是5.17.2-ververica-2.1
版本。
下载frocksdbjni代码
git clone https://github.com/ververica/frocksdb.git
切换到Flink对应的frocksdbjni版本分支。
编译
编译相关说明位于frocksdb/java/RELEASE.md
中。编译命令为:
make jclean clean rocksdbjavastaticrelease
注意:
编译的时候zlib 1.2.11会出现无法下载的情况。实际情况为zlib下载链接发生了变化。
需要编辑项目根目录的Makefile
,将:
ZLIB_DOWNLOAD_BASE ?= http://zlib.net
修改为:
ZLIB_DOWNLOAD_BASE ?= http://zlib.net/fossils
然后重新编译。
这个问题本人已提交PR修复 https://github.com/ververica/frocksdb/pull/58。读者编译无需再处理此问题。
编译输出位于frocksdb/java/target
。可以找到rocksdbjni-5.17.2-linux64.jar
。虽然名字和frocksdbjni
不同但是内容是一样的。
处理Flink binary
将编译好的frocksdbjni使用maven install命令加入到Flink编译环境的maven仓库。命令示例:
mvn install:install-file -DgroupId=com.ververica -DartifactId=frocksdbjni -Dversion=5.17.2-ververica-2.1 -Dpackaging=jar -Dfile=\path\to\frocksdnjni.jar
然后重新编译Flink。
或者有个更为简单的方式,找到编译好的frocksdbjni jar文件,将其中的:
- librocksdbjni-linux64.so
- librocksdbjni-linux32.so(如果有的话)
替换掉FLINK_HOME/lib
目录中flink-dist.jar
里面的同名文件。
备注
Flink 1.15以上版本的frocksdbjni已更新(>6.20.x)。Jar中包含如下文件:
- librocksdbjni-linux-aarch64-musl.so
- librocksdbjni-linux-aarch64.so
- librocksdbjni-linux-ppc64le-musl.so
- librocksdbjni-linux-ppc64le.so
- librocksdbjni-linux32-musl.so
- librocksdbjni-linux32.so
- librocksdbjni-linux64-musl.so
- librocksdbjni-linux64.so
可支持ARM架构,无需再重新编译适配。