两次任务完整对比分析一、两次执行核心差异总结表格维度第一次执行失败第二次执行成功任务状态FAILED容器 exitCode13SUCCEEDED正常跑完AM 阶段ACCEPTED 后反复重试无法注册 AMACCEPTED → RUNNING → FINISHED关键配置仅添加--exclude-packages未调整类加载优先级新增spark.driver.userClassPathFirsttrue、spark.executor.userClassPathFirsttrueSLF4J 冲突日志持续打印双绑定JVM 启动崩溃仍打印冲突警告但不阻断程序运行核心原因Hadoop 的 slf4j-reload4j 优先级高于 Spark 日志包触发 JVM 启动异常强制优先加载 Spark 自身 jar日志绑定冲突仅为警告不影响业务执行二、关键现象解读1. SLF4J 重复绑定警告始终存在两次执行都会输出plaintextSLF4J: Found binding in spark/log4j-slf4j-impl SLF4J: Found binding in hadoop/lib/slf4j-reload4j这个只是警告不是报错只要最终绑定为 Spark 的Log4jLoggerFactory程序理论上可以正常运行 第一次失败是因为Hadoop 日志包优先加载内部初始化冲突导致 AM 容器直接退出码 13 第二次通过userClassPathFirst让 Spark 包优先加载冲突仅打印日志业务流程正常执行。2. 任务生命周期对比失败流程提交 → ACCEPTED持续等待 AM 注册→ AM 容器启动失败 → 重试 2 次 → FAILED成功流程提交 → ACCEPTED → AM 正常注册进入 RUNNING → 执行 SQL 建表、MySQL 读取、GeoHash 转换、写入 DIM 表 → FINISHED3. 无关警告两次都存在不影响结果Unable to load native-hadoop library仅 Hadoop 本地库性能提示无致命影响resource-types.xml not foundYARN 资源描述文件缺失不影响任务调度Neither spark.yarn.jars nor spark.yarn.archive is set每次提交上传 Spark 依赖包仅拖慢提交速度不报错三、生效的核心修复参数成功脚本必备bash运行--conf spark.driver.userClassPathFirsttrue \ --conf spark.executor.userClassPathFirsttrue \ --exclude-packages org.slf4j:slf4j-reload4juserClassPathFirsttrue优先级最高强制先加载 Spark 自带 jar覆盖集群 Hadoop 的冲突日志包解决 exitCode13 崩溃--exclude-packages辅助过滤用户 jar 内冗余的 slf4j 依赖减少冲突概率。四、任务执行结果校验成功后验证数据1. 查看 DIM 库与表是否生成sqlUSE dim; SHOW TABLES; DESC dim_area_dict;2. 校验地理字典数据量sqlSELECT COUNT(*) FROM dim.dim_area_dict; SELECT * FROM dim.dim_area_dict LIMIT 10;3. 查看 HDFS 存储路径bash运行hdfs dfs -ls hdfs://hdfs-yjx/yjx/app/dim/dim_area_dict五、长期优化建议打包层面根治冲突在 pom.xml 的 hadoop-client 依赖中永久排除slf4j-reload4j彻底消除警告预上传 Spark 依赖包脚本添加--conf spark.yarn.archivehdfs://hdfs-yjx/spark3.3.2-libs.zip避免每次提交上传 Spark jars提速全局配置将userClassPathFirst写入spark-defaults.conf所有 Spark 任务无需重复配置。