Python自动化部署EMR集群集成Apache Sedona 1.7.1失败求助
升级Apache Sedona至1.7.1时EMR自动化部署失败(手动部署正常)
问题概述
尝试将Apache Sedona版本升级到1.7.1,通过Python函数自动化部署EMR集群并执行任务步骤时持续失败,步骤运行约30秒后报错终止;但手动部署相同配置的集群时,所有操作完全正常,无任何报错。已严格遵循Sedona官方EMR配置文档操作,问题仍未解决。
环境信息
- EMR版本:6.9.0(对应Hadoop 3.3.3、Spark 3.3.0),也尝试过其他匹配Spark版本的EMR发行版,问题未得到解决
- 使用的Jar包:
- postgresql-42.7.3.jar
- geotools-wrapper-1.7.1-28.5.jar
- sedona-spark-shaded-3.3_2.12-1.7.1.jar
已完成的配置操作
1. Jar包部署
通过sudo aws cp命令将上述Jar包从S3存储桶复制到集群节点的/usr/lib/spark/jars目录。
2. Bootstrap脚本配置
在Bootstrap脚本中添加了以下环境变量:
export PATH="/hadoop/local/bin:$PATH" export SPARK_HOME=/usr/lib/spark export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH
3. 依赖库安装(Bootstrap中执行)
手动部署时这些依赖可正常使用,暂不认为是冲突原因:
sudo python3 -m pip install pandas sudo python3 -m pip install shapely sudo python3 -m pip install geopandas sudo python3 -m pip install keplergl==0.3.2 sudo python3 -m pip install pydeck==0.8.0 sudo python3 -m pip install attrs matplotlib descartes apache-sedona==1.7.1 sudo python3 -m pip install sqlalchemy==1.4.45 sudo python3 -m pip install psycopg2-binary sudo python3 -m pip install requests==2.25.1 sudo python3 -m pip install pyarrow sudo python3 -m pip install numpy sudo python3 -m pip install dask sudo python3 -m pip install h3 sudo python3 -m pip install boto3 sudo python3 -m pip install slackclient sudo python3 -m pip install geoalchemy2 sudo python3 -m pip install dask-geopandas sudo python3 -m pip install word2number sudo python3 -m pip install wordtodigits sudo python3 -m pip install numwords_to_nums sudo python3 -m pip install h3-pyspark sudo python3 -m pip install fsspec sudo python3 -m pip install fuzzywuzzy sudo python3 -m pip install levenshtein sudo python3 -m pip install --upgrade certifi
4. 自动化部署的Spark提交步骤
通过Python函数构造的任务步骤配置:
step = { 'Name': step_name, 'ActionOnFailure': step_config['actiononfail'], 'HadoopJarStep': { 'Jar': 'command-runner.jar', 'Args': [ 'spark-submit', '--deploy-mode', 'cluster', '--conf', 'spark.serializer=org.apache.spark.serializer.KryoSerializer', '--conf', 'spark.kryo.registrator=org.apache.sedona.core.serde.SedonaKryoRegistrator', step_config['stepscriptlocation'] ] } }
5. 集群配置(spark-defaults分类)
自动化部署时使用的集群配置:
[ { "Classification":"spark-defaults", "Properties":{ "spark.yarn.dist.jars": "/usr/lib/spark/jars/sedona-spark-shaded-3.3_2.12-1.7.1.jar,/usr/lib/spark/jars/geotools-wrapper-1.7.1-28.5.jar", "spark.serializer": "org.apache.spark.serializer.KryoSerializer", "spark.kryo.registrator": "org.apache.sedona.core.serde.SedonaKryoRegistrator", "spark.sql.extensions": "org.apache.sedona.viz.sql.SedonaVizExtensions,org.apache.sedona.sql.SedonaSqlExtensions" } } ]
6. PySpark脚本中的Sedona初始化代码
任务脚本中初始化Sedona上下文的代码:
from sedona.spark import * config = SedonaContext.builder() \ .config('spark.jars.packages', 'org.apache.sedona:sedona-spark-shaded-3.3_2.12:1.7.1,' 'org.datasyslab:geotools-wrapper:1.7.1-28.5,' 'org.postgresql:postgresql:42.7.3') \ .getOrCreate() # Create Sedona context sedona = SedonaContext.create(config)
怀疑方向
目前认为问题与Jar包本身,或是自动化部署过程中Jar包传递到集群的方式有关,但无法定位具体原因,希望得到解决建议。
内容的提问来源于stack exchange,提问作者gcj
相关产品推荐
相关产品推荐

