在Flink集群部署Alink,需要部署三个Jar包(本文会有一个部分专门讲述如何获取),对于不同Flink集群环境,部署方式存在区别,本文将介绍Standalone、Yarn、Docker和K8s。
集群运行Alink程序的提交命令与运行普通 Flink 程序相同,详细步骤见Flink官方部署文档,通常,只要将Alink程序依赖的alink_core_flink库添加到 Flink 的 lib 目录下就能用集群资源计算了。Flink集群有不同的搭建方法(本地、YARN、Kubernetes等)和部署模式,请参考Flink文档首先选择合适的部署模式搭建好集群。
接下来介绍如何获取集群部署所需的jar包,以及如何打包自己的 Alink 程序。
由于 Alink 可以通过 Java 和 Python 两种方式提交,建议在集群部署的时候将相关 Jar 包一起部署上去。尽管 Alink Java 没有单独提供集群部署所需 Jar 包的下载,但它们与 PyAlink 所使用的一致,所以可以从 PyAlink 的lib目录中获取。 具体方式如下:
方式一:
按照Alink快速开始 安装好 PyAlink, 执行命令
python3 -c "import os; import pyalink; print(os.path.join(pyalink.__path__[0], 'lib'))"
在 Python 标准输出中即可拿到对应的 PyAlink lib目录的路径,拷贝该目录下的jar包。
方式二:
下载PyAlink 1.10的whl包,相关链接:链接1链接2(MD5: f92b6fcff0caea332f531f5d97cb00fe),解压开PyAlink 1.10的whl包,解压后的文件结构如下图所示,在pyalink/lib下为集群部署所需的三个jar包。
在 Dockerfile 中用 ADD 命令将 Alink 的 jar 包,添加到镜像中的 Flink 的 lib 目录。
ADD alink_connector_all-1.1-SNAPSHOT.jar $FLINK_LIB_DIR/alink_connector_all-1.1-SNAPSHOT.jar ADD alink_core_flink-1.10_2.11-1.1-SNAPSHOT.jar $FLINK_LIB_DIR/alink_core_flink-1.10_2.11-1.1-SNAPSHOT.jar
ADD alink_python-1.1-SNAPSHOT-shaded.jar $FLINK_LIB_DIR/ alink_python-1.1-SNAPSHOT-shaded.jar
使用Flink官方提供的部署方式,其中增加classloader.resolve-order: parent-first配置项。参考:
https://ci.apache.org/projects/flink/flink-docs-stable/ops/deployment/kubernetes.html
当已经在idea调试运行成功了 Alink 程序,在编译打包前,为了避免与集群的 Flink 版本冲突,首先修改 pom.xml ,将 Flink lib目录下有的依赖加上 <scope>provided</scope> 标签。
<!--
Note: Add scope as `provided` to exclude flink packages when running on cluster.
Ps: If we add `provided` as default, it will be crash when running on local.
-->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_${alink.scala.major.version}</artifactId>
<version>${alink.flink.version}</version>
<scope>provided</scope> <!--修改 flink 相关依赖-->