怎么解决spark yarn 提交异常的问题

发布时间:2021-07-10 11:43:15 作者:chen
来源:亿速云 阅读:310
# 怎么解决Spark YARN提交异常的问题

## 目录
1. [引言](#引言)
2. [常见异常类型及现象](#常见异常类型及现象)
3. [问题排查方法论](#问题排查方法论)
4. [典型问题解决方案](#典型问题解决方案)
5. [最佳实践建议](#最佳实践建议)
6. [总结](#总结)

## 引言
Apache Spark作为主流分布式计算框架,与YARN资源管理器的集成是企业级部署的常见方案。但在实际生产环境中,`spark-submit`提交任务到YARN集群时可能遇到各种异常情况。本文将系统梳理常见异常场景,提供详细的排查思路和解决方案。

## 常见异常类型及现象

### 1. 资源申请失败类异常
```log
ERROR yarn.Client: Application diagnostics message: 
Application application_XXXXXX failed 2 times due to AM Container 
for appattempt_XXXXXX exited with exitCode: -1000

2. 类路径冲突异常

java.lang.NoSuchMethodError: org.apache.hadoop.conf.Configuration.getPassword(Ljava/lang/String;)[C

3. 网络通信异常

ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: Yarn application has already ended! 

4. 权限相关异常

org.apache.hadoop.security.AccessControlException: 
Permission denied: user=spark, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x

问题排查方法论

1. 日志收集三板斧

2. 资源检查清单

检查项 命令示例 正常值参考
集群可用内存 yarn node -list 至少>1GB可用
最大容器大小 yarn.scheduler.maximum-allocation-mb 需>Spark申请值
队列资源使用率 yarn queue -status <queue> <80%利用率

3. 配置验证工具

// 在spark-shell中验证Hadoop配置
sc.hadoopConfiguration.get("yarn.resourcemanager.address")

典型问题解决方案

案例1:AM容器频繁重启

现象:AM容器在启动后立即退出,尝试多次后失败

解决方案: 1. 增加AM内存:

   spark-submit --conf spark.yarn.am.memory=2g ...
  1. 检查JVM参数:
    
    --conf spark.yarn.am.extraJavaOptions="-XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
    
  2. 验证YARN最小分配:
    
    <!-- yarn-site.xml -->
    <property>
     <name>yarn.scheduler.minimum-allocation-mb</name>
     <value>1024</value>
    </property>
    

案例2:类加载冲突

现象:出现NoClassDefFoundErrorMethodNotFound异常

解决步骤: 1. 统一依赖版本:

   spark-submit --jars /path/to/hadoop-common-3.2.1.jar,/path/to/hadoop-hdfs-3.2.1.jar
  1. 使用隔离模式:
    
    --conf spark.executor.userClassPathFirst=true \
    --conf spark.driver.userClassPathFirst=true
    
  2. 检查依赖树:
    
    mvn dependency:tree > dep.log
    

案例3:动态资源分配失效

配置示例

--conf spark.dynamicAllocation.enabled=true \
--conf spark.shuffle.service.enabled=true \
--conf spark.dynamicAllocation.minExecutors=2 \
--conf spark.dynamicAllocation.maxExecutors=10

必须同步配置

<!-- yarn-site.xml -->
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>spark_shuffle</value>
</property>
<property>
  <name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
  <value>org.apache.spark.network.yarn.YarnShuffleService</value>
</property>

最佳实践建议

1. 资源调优公式

# Executor内存计算参考
executor_memory = (yarn_nodemanager_resource_memory_mb * 0.8 - spark.yarn.am.memory) 
                 / spark.executor.instances

2. 推荐配置模板

# spark-defaults.conf 关键配置
spark.yarn.queue=production
spark.yarn.maxAppAttempts=3
spark.yarn.am.attemptFailuresValidityInterval=1h
spark.serializer=org.apache.spark.serializer.KryoSerializer
spark.network.timeout=300s

3. 故障自愈方案

#!/bin/bash
# 自动重试脚本示例
MAX_RETRY=3
ATTEMPT=0
until [ $ATTEMPT -eq $MAX_RETRY ]; do
  spark-submit "$@" && break
  ATTEMPT=$((ATTEMPT+1))
  sleep $((ATTEMPT*10))
done

总结

解决Spark on YARN提交异常需要系统化的方法论: 1. 掌握日志分析技巧 2. 理解YARN资源调度机制 3. 建立配置检查清单 4. 制定标准化部署流程

建议定期进行: - 集群资源审计 (yarn rmadmin -refreshQueues) - Spark版本升级验证 - 压力测试验证配置有效性

通过本文介绍的方法,可以解决80%以上的常见提交异常问题。对于复杂问题,建议结合JVM堆栈分析和网络抓包等高级手段进行诊断。 “`

该文档包含: 1. 结构化的问题分类 2. 可操作的命令示例 3. 可视化的问题排查流程图(建议补充) 4. 典型配置模板 5. 故障处理脚本示例 6. 系统化的检查清单

实际生产中还需结合具体环境调整参数,建议配合监控系统(如Prometheus+Grafana)实现实时异常检测。

推荐阅读:
  1. 在IDEA中编写spark程序
  2. Spark on Yarn with Hive实战案例与常见问题解决

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spark

上一篇:Python中locals 和globals如何使用

下一篇:angularjs+bootstrap菜单怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》