如何在本地Docker容器的Glue作业中使用额外Python模块?
解决本地Docker Glue环境中awswrangler模块找不到的问题
问题原因
本地直接使用spark-submit命令无法识别Glue特有的--additional-python-modules参数(该参数由Glue服务端处理),同时EXTRA_PYTHON_LIBS环境变量需要配合Glue官方镜像提供的封装命令才能生效。
解决方案
方案一:使用Glue封装的gluesparksubmit命令替换spark-submit
官方镜像提供的gluesparksubmit会处理Glue专属参数,自动安装额外Python库,修改后的运行命令如下:
docker run -it -v ~/.aws:/home/glue_user/.aws \ -v $WORKSPACE_LOCATION:/home/glue_user/workspace/ \ -e AWS_REGION=$REGION \ -e AWS_ACCESS_KEY_ID="$ACCESS_KEY" \ -e AWS_SECRET_ACCESS_KEY="$SECRET_KEY" \ -e AWS_SESSION_TOKEN="$SESSION_TOKEN" \ -e PYTHONPATH="/home/glue_user/workspace/src" \ -e EXTRA_PYTHON_LIBS="awswrangler==3.11.0" \ -e DISABLE_SSL=true \ -e SPARK_PRINT_LAUNCH_COMMAND=true \ -e LOG_LEVEL=DEBUG \ --rm -p 4040:4040 -p 18080:18080 --name glue_spark_submit \ amazon/aws-glue-libs:glue_libs_4.0.0_image_01 \ gluesparksubmit /home/glue_user/workspace/$GLUE_JOB_PATH \ --JOB_NAME "test-job" \ --stage "beta" \ --additional-python-modules "awswrangler==3.11.0"
方案二:启动容器时先安装awswrangler再运行脚本
通过bash -c先执行pip安装依赖,再运行spark-submit:
docker run -it -v ~/.aws:/home/glue_user/.aws \ -v $WORKSPACE_LOCATION:/home/glue_user/workspace/ \ -e AWS_REGION=$REGION \ -e AWS_ACCESS_KEY_ID="$ACCESS_KEY" \ -e AWS_SECRET_ACCESS_KEY="$SECRET_KEY" \ -e AWS_SESSION_TOKEN="$SESSION_TOKEN" \ -e PYTHONPATH="/home/glue_user/workspace/src" \ -e DISABLE_SSL=true \ -e SPARK_PRINT_LAUNCH_COMMAND=true \ -e LOG_LEVEL=DEBUG \ --rm -p 4040:4040 -p 18080:18080 --name glue_spark_submit \ amazon/aws-glue-libs:glue_libs_4.0.0_image_01 \ bash -c "pip install awswrangler==3.11.0 && spark-submit /home/glue_user/workspace/$GLUE_JOB_PATH \ --JOB_NAME 'test-job' \ --stage 'beta'"
方案三:构建预安装awswrangler的自定义镜像
如果频繁使用该依赖,可基于官方镜像构建自定义镜像:
- 创建
Dockerfile:
FROM amazon/aws-glue-libs:glue_libs_4.0.0_image_01 USER root RUN pip install awswrangler==3.11.0 USER glue_user
- 构建镜像:
docker build -t custom-glue-libs:4.0-awswrangler .
- 使用自定义镜像运行脚本:
docker run -it -v ~/.aws:/home/glue_user/.aws \ -v $WORKSPACE_LOCATION:/home/glue_user/workspace/ \ -e AWS_REGION=$REGION \ -e AWS_ACCESS_KEY_ID="$ACCESS_KEY" \ -e AWS_SECRET_ACCESS_KEY="$SECRET_KEY" \ -e AWS_SESSION_TOKEN="$SESSION_TOKEN" \ -e PYTHONPATH="/home/glue_user/workspace/src" \ -e DISABLE_SSL=true \ -e SPARK_PRINT_LAUNCH_COMMAND=true \ -e LOG_LEVEL=DEBUG \ --rm -p 4040:4040 -p 18080:18080 --name glue_spark_submit \ custom-glue-libs:4.0-awswrangler \ spark-submit /home/glue_user/workspace/$GLUE_JOB_PATH \ --JOB_NAME "test-job" \ --stage "beta"
注意事项
- Glue 4.0对应Python 3.9,确保安装的awswrangler版本(如3.11.0)兼容该Python版本。
- 使用
gluesparksubmit时,建议在--additional-python-modules中指定具体版本,避免版本冲突。
内容的提问来源于stack exchange,提问作者Neel Vasa
相关产品推荐
相关产品推荐

