Apache Flink 1.19.0调用in_streaming_mode()报FileNotFoundError求助
PyFlink启动报错FileNotFoundError: [WinError 2] 解决办法
问题描述
作为Apache Flink新手,运行PyFlink代码时在in_streaming_mode()方法处触发FileNotFoundError: [WinError 2] 系统找不到指定的文件错误。已安装Java 21,使用Flink 1.19.0版本,尝试过卸载重装组件但无效。
运行代码
from pyflink.table import EnvironmentSettings, TableEnvironment setting = EnvironmentSettings.in_streaming_mode() table_env = TableEnvironment.create(environment_settings=setting) country_dict = {"1":"canda","2":"India"} schema = ["id","country"] table = table_env.from_elements(country_dict,schema=schema) if __name__=="__main__" print(table.get_schema()) print(table.execute())
错误栈(中文翻译)
回溯(最近的调用最后): 文件"<stdin>", 第1行, 在<module>中 文件"C:\Users\91889\AppData\Roaming\Python\Python311\site-packages\pyflink\table\environment_settings.py", 第229行, 在in_streaming_mode中 return EnvironmentSettings.new_instance().in_streaming_mode().build() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件"C:\Users\91889\AppData\Roaming\Python\Python311\site-packages\pyflink\table\environment_settings.py", 第196行, 在new_instance中 return EnvironmentSettings.Builder() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件"C:\Users\91889\AppData\Roaming\Python\Python311\site-packages\pyflink\table\environment_settings.py", 第53行, 在__init__中 gateway = get_gateway() ^^^^^^^^^^^^^ 文件"C:\Users\91889\AppData\Roaming\Python\Python311\site-packages\pyflink\java_gateway.py", 第64行, 在get_gateway中 _gateway = launch_gateway() ^^^^^^^^^^^^^^^^ 文件"C:\Users\91889\AppData\Roaming\Python\Python311\site-packages\pyflink\java_gateway.py", 第110行, 在launch_gateway中 p = launch_gateway_server_process(env, args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件"C:\Users\91889\AppData\Roaming\Python\Python311\site-packages\pyflink\pyflink_gateway_server.py", 第315行, 在launch_gateway_server_process中 return Popen(list(filter(lambda c: len(c) != 0, command)), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件"C:\Program Files\Python311\Lib\subprocess.py", 第1024行, 在__init__中 self._execute_child(args, executable, preexec_fn, close_fds, 文件"C:\Program Files\Python311\Lib\subprocess.py", 第1509行, 在_execute_child中 hp, ht, pid, tid = _winapi.CreateProcess(executable, args, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [WinError 2] 系统找不到指定的文件
解决步骤
检查Java环境变量配置
- 确认
JAVA_HOME系统环境变量指向Java安装根目录(如C:\Program Files\Java\jdk-21),路径不能包含空格或特殊字符 - 将
%JAVA_HOME%\bin添加到系统PATH环境变量的最顶端,避免其他Java版本干扰 - 重启命令提示符,执行
java -version和javac -version,确认能正常输出版本信息
- 确认
手动在代码中指定Java路径
在代码开头添加环境变量设置,强制PyFlink使用正确的Java路径:import os # 替换为你的Java实际安装路径 os.environ["JAVA_HOME"] = "C:\\Program Files\\Java\\jdk-21" os.environ["PATH"] = os.path.join(os.environ["JAVA_HOME"], "bin") + ";" + os.environ["PATH"] from pyflink.table import EnvironmentSettings, TableEnvironment # 后续代码不变修复代码语法与数据格式问题
if __name__=="__main__"末尾缺少冒号,修正为if __name__=="__main__":from_elements方法需要接收可迭代的元素(如元组列表),直接传字典会导致解析异常,修正数据格式:# 修正字典为元组列表,同时修正拼写错误canda→canada country_data = [("1", "canada"), ("2", "India")] table = table_env.from_elements(country_data, schema=schema)
降级Java版本到兼容版本
Flink 1.19.0官方仅支持Java 8、11、17,Java 21属于非兼容版本,容易出现启动问题。卸载Java 21,安装Java 17并重新配置环境变量后重试。重装PyFlink确保完整性
执行以下命令强制重装指定版本的PyFlink:pip uninstall -y apache-flink pip install apache-flink==1.19.0 --force-reinstall
内容的提问来源于stack exchange,提问作者Bhaskar Arya
相关产品推荐
相关产品推荐

