Pyflink开发-环境部署
前言
由于公司项目主要模块为python开发,最好项目都能跑在python环境下
公司虽然有flink平台,如果需要公司平台来支持pyflink 不一定有能力和资源去推动做这件事
我们需要自己来维护一个小集群flink环境 满足我们项目需求即可
最好的方案是实现部署在docker环境中.管理方便,资源最小化
PyFlink环境准备
- JDK 1.8+
- Python 3.5+
- Flink-1.10.0
本地环境安装
Flink-1.10.0 scala-2.11 到本地并解压 https://archive.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.11.tgz
pip install apache-flink 完成如下
注意以下两个模块版本
1
2apache-beam 2.15.0
apache-flink 1.10.0
1 | pip list |
安装模块需要比较好的网络 可以使用国内pip源
用户目录pip配置~/.config/pip/pip.conf
1 | [global] |
Docker集群环境
官方并有一个python环境的flink,需要自己构建一个python环境的flink。
1.构建PyFlink 环境 Docker Image
相关项目代码已发布git如下 https://git.chinawayltd.com/rdp/pyflink-rdp
在原官方Dockerfile中 加了入python环境及pyflink依赖 https://github.com/apache/flink-docker/blob/346809e6cab2ca0ac702fb4d2bf56afb6ee3c437/1.10/scala_2.11-debian/Dockerfile
1 | # Install python |
为了加快构建速度这里将 Flink安装包 下载到本地
1 | COPY flink-1.10.0-bin-scala_2.11.tgz $FLINK_HOME |
2. 构建镜像 docker build -t pyflink-rdp:v1 .
1 | docker images |
最终整个镜像确实有点大.
3. docker-compose 编排如官网
1 | version: "1.0" |
4. 启动docker-compose up -d
1 | Creating pyflink-rdp_taskmanager_1 ... done |
访问http://$ip:8081验证成功
5. 部署
在本地Flink目录
./flink run -m $ip:8081 -py $path/deploy_demo.py
6. K8S
https://ci.apache.org/projects/flink/flink-docs-stable/ops/deployment/kubernetes.html
遇到问题
- [本地环境]ModuleNotFoundError: No module named ‘grpc’
本地python环境有点问题 重新配置了python环境和pip - [本地环境]google/protobuf/descriptor_database.cc:58] file already exists in database:
暂时将pyarrow从0.14.1 升级至pip install pyarrow==0.15.1 (可能有潜在问题)
Some synt actic constructs of Python 3 are not yet fully supported by Apache Beam.