Pyflink 开发问题记录

在此记录 pyflink 运行过程中遇到的问题以及解决方法。让小伙伴们少走弯路。

Q1: No module named 'encodings'

Caused by: java.io.IOException: Failed to execute the command: venv.zip/venv/bin/python -c import pyflink;import os;print(os.path.join(os.path.abspath(os.path.dirname(pyflink.__file__)), 'bin'))
output: Could not find platform independent libraries 
Could not find platform dependent libraries 
Consider setting $PYTHONHOME to [:]
Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

问题分析:Python 环境的问题,用 virtualenv 来管理虚拟环境时遇到。

问题解决:利用以下脚本(注意修改 pyflink 版本),使用 miniconda3 来管理虚拟环境即可解决。

wget https://ci.apache.org/projects/flink/flink-docs-release-1.11/downloads/setup-pyflink-virtual-env.sh
sh setup-pyflink-virtual-env.sh 1.11.2
source venv/bin/activate  # 激活虚拟环境

Q2: No module named 'encodings'

  File "main.py", line 2
SyntaxError: Non-ASCII character '\xe5' in file main.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
org.apache.flink.client.program.ProgramAbortException

问题分析:表面上是无法解析非 ASCII 码,实际上是因为当前的 python 版本错了。通过 flink run 来提交 Python 任务时,Flink 会调用 “python” 命令,要求 python 的版本为 3.5, 3.6 或者 3.7 中的一个。

问题解决:激活虚拟环境,使得运行 python -V 时显示的 python 版本为 3.5,3.6 或 3.7

Q3: Could not find any factory for identifier 'kafka'

Caused by: org.apache.flink.table.api.ValidationException: Could not find any factory for identifier 'kafka' that implements 'org.apache.flink.table.factories.DynamicTableSourceFactory' in the classpath.org.apache.flink.client.program.ProgramAbortException

问题分析:没有指定 kafka jar 文件

问题解决:在 flink run 的时候,加入参数 -j flink-sql-connector-kafka_2.11-1.11.2.jar ,具体 jar 包的下载路径见 Apache Kafka SQL Connector,根据 kafka 版本选择 jar 包来下载。

Q4: The parallelism must be a positive number: yarch

The parallelism must be a positive number: yarch

问题分析:并行度要设置为正数

问题解决:在 flink run 的时候,加入参数 -p 1。但问题可能出在 flink 上。直接部署的 flink 没有问题,但是集成到 CDH 后,flink 的配置参数发生了变化,导致无法以简单的 flink run 的方式来运行

Q5: No manifest found in jar file '/xxxx/venv.zip'

org.apache.flink.client.program.ProgramInvocationException: No manifest found in jar file '/xxxx/venv.zip'. The manifest is need to point to the program's main class.

问题分析:没有找到 manifest 文件来指定程序的 main class。

问题解决:同 Q4,可能是 flink 没有正确安装好。

Q6: Neither a 'Main-Class', nor a 'program-class' entry was found in the jar file.

org.apache.flink.client.program.ProgramInvocationException: Neither a 'Main-Class', nor a 'program-class' entry was found in the jar file.

问题分析:jar 包里没有指定 'Main-Class' 或 'program-class'

问题解决:同 Q4,可能是 flink 没有正确安装好。

你可能感兴趣的:(Pyflink 开发问题记录)