设置pyflink udf执行环境的方式
首先我们要知道当我们利用flink run运行程序(任何语言程序)是需要指定python 进程的解析器,flink执行python udf默认使用的python是目前系统python所指向的版本 也就是你命令行输入python --version所显示的版本
通过flink官网我们可以得知可以通过以下方式设置python执行路径:
- 在flink的bin目录下 flink-conf.yaml设置 python.client.executable: python所在路径。例如python.client.executable: /usr/bin/python3
- 在源码中修改python.client.executable
- 就是系统默认的python,该python可以通过以下方式修改
- 通过ln -s python3 python 建立软连接的方式
- 通过修改环境变量中的PYFLINK_CLIENT_EXECUTABLE
- 修改环境变量中python的指向
上边介绍了这么多设置Python interpreter
这些都是执行udf函数所用的,本身pyflink需要前文提到的系统本身默认的Python interpreter来运行,所以要确保python满足flink对于版本的要求。否则就会报错:
- RuntimeError: Python versions prior to 3.5 are not supported for PyFlink [sys.version_info(major=2, minor=7, micro=5, releaselevel=‘final’, serial=0)].
- RuntimeError: Python versions prior to 3.6 are not supported for PyFlink [sys.version_info(major=2, minor=7, micro=5, releaselevel=‘final’, serial=0)].
在此我们要区分flink 进程编译和flink woker编译的区别,flink进程是在client(客户端)机子上存在的python环境,flink worker是task manger上的环境。
以下是flink worker环境的指定方式:
1. table_env.get_config().set_python_executable(“/path/to/python”)或stream_execution_environment.set_python_executable(“/path/to/python”)。
2. conf文件中配置python.executable参数。
3. -pyexec 或 --pyExecutable在提交作业是指定。