AWS Glue脚本添加外部Jar报错,Notebook却正常的问题咨询
关于AWS Glue脚本与Notebook加载外部Jar的配置差异问题
问题现象
- Glue Notebook通过魔法命令可正常加载外部Jar(如Sedona),示例配置:
%idle_timeout 2880 %worker_type G.1X %number_of_workers 10 %additional_python_modules apache-sedona==1.6.1,shapely,pyproj %extra_jars https://repo1.maven.org/maven2/org/apache/sedona/sedona-spark-shaded-3.0_2.12/1.6.1/sedona-spark-shaded-3.0_2.12-1.6.1.jar
- 但Glue脚本作业在高级属性的
extra-jars参数中传入相同HTTPS路径时,触发报错:
"LAUNCH ERROR | Error downloading from S3 for URL https://repo1.maven.org/maven2/org/apache/sedona/sedona-spark-shaded-3.0_2.12/1.6.1/sedona-spark-shaded-3.0_2.12-1.6.1.jar. Invalid S3 URI: hostname does not appear to be a valid S3 endpoint."
核心原因
这是AWS Glue的设计差异导致的:
- Glue Notebook的
%extra_jars魔法命令支持直接从公网Maven仓库加载Jar,底层运行环境允许访问公网并自动处理公网URL下载。 - Glue脚本作业的
extra-jars参数仅支持S3路径,启动流程会默认将传入的路径解析为S3 URI,因此公网HTTPS URL会被判定为无效S3端点。
解决办法
方法1:上传Jar到S3后引用
- 将Sedona Jar文件上传至你的AWS S3桶,例如路径:
s3://your-glue-jars/sedona-spark-shaded-3.0_2.12-1.6.1.jar - 在Glue作业的高级属性中,将
extra-jars参数设置为上述S3路径 - 确保Glue作业关联的IAM角色拥有该S3桶的
s3:GetObject权限
方法2:通过Python模块自动拉取
无需手动上传Jar,直接在Glue作业的--additional-python-modules参数中指定:
apache-sedona==1.6.1,shapely,pyproj
注意:需确保Glue作业的运行环境能访问公网(或配置VPC端点以访问Maven仓库),系统会自动拉取对应的依赖Jar。
验证说明
已在Glue Notebook中通过以下代码验证Sedona Jar可用:
import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from pyspark.sql import SQLContext from awsglue.context import GlueContext from awsglue.job import Job from sedona.spark import * sedona = SedonaContext.create(spark) test = sedona.sql("SELECT ST_POINT(1., 2.) as geom").show() print("ran sedona sql call, SUCCESS")
内容的提问来源于stack exchange,提问作者geo_coder
相关产品推荐
相关产品推荐

