Dataproc Serverless PySpark作业中elasticsearch模块缺失问题求助
Dataproc Serverless Spark PySpark作业elasticsearch包导入失败排查
在Dataproc Serverless Spark PySpark作业中使用elasticsearch包时,出现ModuleNotFoundError: No module named 'elasticsearch'错误,但pandas、statsmodels、numpy等其他依赖包均能正常导入。已按照Spark官方虚拟环境配置文档操作,并通过--archives参数提交作业,需要找出遗漏的配置步骤。
测试代码
import os print("Current dir:", os.getcwd()) print("Current dir list:", os.listdir('.')) import pandas import statsmodels import platform import numpy print("Python version:", platform.python_version()) print("Pandas version:", pandas.__version__) print("statsmodel version:", statsmodels.__version__ ) print("Numpy version:", numpy.__version__) from elasticsearch import Elasticsearch as es print("elasticsearch version:", es.__version__ )
运行输出
Current dir: /tmp/srvls-batch-7554fe27-4044-4341-ae79-ffe9488ea385 Current dir list: ['pyspark_venv.tar.gz', '.test_sls.py.crc', 'test_sls.py'] Python version: 3.9.15 Pandas version: 1.4.4 statsmodel version: 0.13.5 Numpy version: 1.21.6 Traceback (most recent call last): File "/tmp/srvls-batch-7554fe27-4044-4341-ae79-ffe9488ea385/test_sls.py", line 16, in <module> from elasticsearch import Elasticsearch as es ModuleNotFoundError: No module named 'elasticsearch'
参考文档(官方Virtualenv配置中文翻译)
使用Virtualenv打包Python依赖
- 创建与集群Python版本匹配的虚拟环境:
python -m venv pyspark_venv source pyspark_venv/bin/activate - 安装所需依赖包:
pip install pandas statsmodels numpy elasticsearch - 打包虚拟环境(确保路径正确):
tar czf pyspark_venv.tar.gz -C pyspark_venv . - 提交作业时指定虚拟环境配置:
通过--archives上传打包文件,并添加Spark配置启用虚拟环境:gcloud dataproc batches submit pyspark test_sls.py \ --region=你的集群区域 \ --archives=pyspark_venv.tar.gz#environment \ --conf spark.pyspark.virtualenv.enabled=true \ --conf spark.pyspark.virtualenv.type=native \ --conf spark.pyspark.virtualenv.bin.path=/opt/python3.9/bin/python
可能遗漏的步骤排查
- 确认虚拟环境中elasticsearch的安装状态:重新进入虚拟环境,执行
pip list查看是否存在elasticsearch包,若缺失则重新执行pip install elasticsearch并确认安装成功。 - 检查虚拟环境打包的完整性:打包时必须使用
tar czf pyspark_venv.tar.gz -C pyspark_venv .命令,避免将虚拟环境的上层目录打包进去,导致Spark无法识别包路径。 - 验证作业提交的核心配置:提交作业时必须添加以下配置项,确保Spark启用虚拟环境:
--conf spark.pyspark.virtualenv.enabled=true--conf spark.pyspark.virtualenv.type=native- 若集群Python版本有指定,需添加
--conf spark.pyspark.virtualenv.bin.path=<对应Python路径>(比如输出中的3.9.15版本对应路径/opt/python3.9/bin/python)
- 检查Python版本一致性:虚拟环境创建时使用的Python版本必须与Dataproc Serverless运行环境的Python版本(输出中为3.9.15)完全匹配,避免版本差异导致包无法被识别。
内容的提问来源于stack exchange,提问作者ash_ketchum12
相关产品推荐
相关产品推荐

