如何解决Flink提交PyFlink作业到Yarn Application时找不到Python任务脚本的问题?

Flink提交PyFlink作业到Yarn时找不到Python脚本的解决方案

在使用Flink提交PyFlink作业到Yarn时,如果遇到找不到Python脚本的错误,通常是由于Python脚本路径配置错误或Python环境设置问题导致的。本文将分析并解决此问题。

您使用了以下命令提交PyFlink作业:

./flink run-application -t yarn-application \
-dyarn.application.name=flinkcdctestpython \
-dyarn.provided.lib.dirs="hdfs://nameservice1/pyflink/flink-dist-181" \
-pyarch hdfs://nameservice1/pyflink/pyflink181.zip \
-pyclientexec pyflink181.zip/pyflink181/bin/python \
-pyexec pyflink181.zip/pyflink181/bin/python \
-py hdfs://nameservice1/pyflink/wc2.py

错误信息如下:

2025-05-24 16:38:02,030 info org.apache.flink.client.python.pythondriver [] - pyflink181.zip/pyflink181/bin/python: can't open file 'hdfs://nameservice1/pyflink/wc2.py': [errno 2] no such file or directory

该错误表明Flink找不到指定的Python脚本wc2.py。然而,提交Java作业时HDFS配置正常,说明HDFS配置本身没有问题。

问题可能出在以下几个方面:

  1. Python脚本路

    径: 仔细检查hdfs://nameservice1/pyflink/wc2.py路径是否正确,以及wc2.py文件是否存在于该路径下。使用HDFS命令验证:

    hdfs dfs -ls hdfs://nameservice1/pyflink/wc2.py
  2. Python环境配置: -pyclientexec-pyexec参数指定了Python执行环境。确保pyflink181.zip中的Python环境配置正确,并且可以访问HDFS。建议将参数直接指向HDFS上的Python环境路径:

    -pyclientexec hdfs://nameservice1/pyflink/pyflink181.zip/pyflink181/bin/python
    -pyexec hdfs://nameservice1/pyflink/pyflink181.zip/pyflink181/bin/python
  3. 权限问题: 确保Flink作业具有访问HDFS上Python脚本文件的权限。检查文件权限:

    hdfs dfs -ls -h hdfs://nameservice1/pyflink/wc2.py
  4. Flink和PyFlink版本兼容性: 确认Flink版本与PyFlink版本兼容。版本不匹配可能导致问题。

通过以上步骤排查,您应该能够找到并解决Flink提交PyFlink作业时找不到Python脚本的问题。如果问题仍然存在,请检查Flink和PyFlink的日志文件,寻找更多线索。