You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Spark事件日志到S3后Streaming作业因退出码134失败

Spark Streaming作业Executor退出码134问题分析与解决

环境信息

  • EMR版本:emr-5.30.0
  • Spark版本:2.4.5
  • Hadoop版本:2.8.5

问题原因

退出码134对应进程收到SIGABRT信号,通常由JNI层面崩溃或内存异常引发,这里的核心诱因是手动复制的AWS SDK和hadoop-aws.jar与EMR集群原生依赖版本不兼容。

EMR的Spark、Hadoop组件已预集成适配当前版本的AWS相关依赖,手动将aws-java-sdk-core、aws-java-sdk-s3、hadoop-aws.jar复制到Spark jars目录后,打破了集群原生的依赖一致性。普通Spark作业或PyShell因生命周期短、与S3交互频率低,暂时未触发冲突;但Streaming作业持续运行,会频繁和S3进行事件日志读写操作,版本冲突直接触发JNI崩溃,导致Executor容器被终止。

解决方法

  1. 移除手动添加的jar包:删除复制到Spark jars目录的aws-java-sdk-core、aws-java-sdk-s3、hadoop-aws.jar文件,恢复集群原生依赖环境。
  2. 重新配置S3事件日志:仅通过spark-defaults.conf完成配置即可,无需额外添加jar包:
    • 编辑/etc/spark/conf/spark-defaults.conf,添加或修改以下参数:
      spark.eventLog.enabled=true
      spark.eventLog.dir=s3a://你的存储桶路径/
      # 若实例角色未覆盖S3权限,可添加:
      # spark.hadoop.fs.s3a.access.key=你的AK
      # spark.hadoop.fs.s3a.secret.key=你的SK
      
    • 重启Spark历史服务器:
      sudo stop spark-history-server
      sudo start spark-history-server
      
  3. 依赖管理规范:后续如需调整AWS相关依赖,不要手动复制jar包,应通过EMR集群的配置分类(如spark-defaults或hadoop-env)进行参数指定,确保依赖版本与集群原生组件兼容。

内容的提问来源于stack exchange,提问作者Ritik Kaushik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:37:12