AWS EMR 6.1.0集群spark-submit提交PySpark任务报错如何排查修复?
问题排查步骤
- 优先查看YARN应用的完整日志定位根因:你使用
cluster模式提交任务时,Spark Driver运行在YARN容器中,提交命令所在的主节点不会输出应用的实际报错。执行命令yarn logs -applicationId <日志中打印的application ID,格式为application_xxxx_0003>,检索日志中的Python Traceback记录,即可定位到main.py抛出的具体异常。 - 快速验证可切换为
client模式提交:执行spark-submit --deploy-mode client --master yarn main.py,此时Driver运行在你提交任务的主节点上,代码报错会直接输出到控制台,无需拉取YARN日志即可快速定位问题。 - 排查依赖兼容性问题:EMR 6.1.0默认预装的Python版本为3.7,确认你代码中引入的
numpy、pandas等第三方库,是否在集群所有节点(含Driver、Executor运行的节点)都安装了匹配版本,依赖缺失会直接导致代码初始化失败退出。 - 排查权限问题:你代码中开启了
enableHiveSupport(),确认提交任务使用的root用户是否拥有Hive元数据访问权限、对应HDFS读写路径的权限,权限不足会导致SparkSession初始化阶段直接崩溃。 - 补充异常捕获逻辑:在
main函数外层添加全局异常捕获,打印完整错误栈后再退出,避免异常被吞无法定位,示例代码如下:
if __name__ == '__main__': try: main() except Exception as e: import traceback traceback.print_exc() raise
常见修复方案
- 依赖缺失问题:可以通过
spark-submit添加--py-files参数上传依赖包,或打包Python虚拟环境全量分发,也可提前在集群所有节点通过pip安装所需的第三方库。 - 权限不足问题:切换为拥有对应资源权限的用户提交任务,或给
root用户开通Hive库表、HDFS目录的访问权限。 - 配置警告优化:日志中的配置项废弃警告不会导致任务失败,若你在
spark-defaults.conf或代码中手动配置了旧键spark.scheduler.listenerbus.eventqueue.size,替换为新键spark.scheduler.listenerbus.eventqueue.capacity即可消除警告。 - 路径类问题:代码中用到的文件路径如果是本地路径,需保证所有集群节点都能访问该路径,否则替换为HDFS统一路径。
内容的提问来源于stack exchange,提问作者Joe Shmo
相关产品推荐
相关产品推荐

