Container exited with a non-zero exit code 1 Failing this attempt. Failing the application.

在使用Spark on YARN提交任务时遇到错误,提示'Container exited with a non-zero exit code 1'。通过检查YARN日志和stderr文件,发现问题是由于打包的jar中缺少依赖。解决方案是使用sbt-assembly插件将所有依赖打包到fat JAR中,更新`build.sbt`配置,然后重新打包并提交任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在使用spark on yarn模式提交任务,下面是我测试的案例

--提交命令

spark-submit --master yarn-cluster --class com.htlx.sage.bigdata.spark.etl.Application --driver-memory 1g --num-executors 2 --executor-memory 2g --executor-cores 2  my-spark-etl_2.11-1.0-SNAPSHOT.jar 

--运行后报的错误是


--对这个错误很是郁闷,上网查说是配置问题,可是我运行其他代码就没问题,再说我在搭建集群的时候很是研究了一番,集群不会出现错误,所以我只能去yarn的运行日志中,在yarn的日志中也没有发现什么只有上面这个错误,然后我又去运行该程序的日志中找




-- 查看stderr文件,发现是找不到com/typesafe/scalalogging/Logger

2025-03-13 14:16:04,361 INFO mapreduce.Job: Job job_1741846445680_0001 failed with state FAILED due to: Application application_1741846445680_0001 failed 2 times due to AM Container for appattempt_1741846445680_0001_000002 exited with exitCode: 1 Failing this attempt.Diagnostics: [2025-03-13 14:16:03.777]Exception from container-launch. Container id: container_1741846445680_0001_02_000001 Exit code: 1 [2025-03-13 14:16:03.861]Container exited with a non-zero exit code 1. Error file: prelaunch.err. Last 4096 bytes of prelaunch.err : Last 4096 bytes of stderr : Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster Please check whether your etc/hadoop/mapred-site.xml contains the below configuration: <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value> </property> [2025-03-13 14:16:03.862]Container exited with a non-zero exit code 1. Error file: prelaunch.err. Last 4096 bytes of prelaunch.err : Last 4096 bytes of stderr : Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster Please check whether your etc/hadoop/mapred-site.xml contains the below configuration: <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value> </property> For more detailed output, check the application tracking page: http://hadoop01:8088/cluster/app/application_1741846445680_0001 Then click on links to logs of each attempt. . Failing the application. 2025-03-13 14:16:04,427 INFO mapreduce.Job: Counters: 0 报错日志
最新发布
03-14
<think>嗯,用户遇到了Hadoop MapReduce作业失败的问题,错误信息显示找不到或无法加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster。这个问题看起来和配置有关,尤其是mapred-site.xml里的设置。 首先,我需要回忆一下Hadoop的架构。MRAppMaster是YARN中负责管理MapReduce作业生命周期的组件,如果它无法启动,通常是因为环境变量没有正确配置,导致找不到相关的类路径。用户提供的日志里也提示了要检查mapred-site.xml中的三个属性,特别是HADOOP_MAPRED_HOME的路径是否正确。 接下来,我应该考虑用户可能的配置错误。可能的情况包括HADOOP_MAPRED_HOME的路径没有正确设置为Hadoop安装目录,或者这些配置项没有被正确添加到mapred-site.xml文件中。另外,也有可能是Hadoop的安装目录权限有问题,或者分布式缓存没有正确设置,导致NodeManager无法访问所需的JAR文件。 然后,我需要分步骤引导用户解决问题。第一步是检查mapred-site.xml中的相关配置,确保路径正确且没有使用占位符。第二步是确认Hadoop的环境变量,比如在hadoop-env.sh中是否正确设置了HADOOP_MAPRED_HOME。第三步是检查安装目录的权限,确保所有节点都有访问权限。第四步是确认JAR文件是否存在,可能需要重新安装或者复制Hadoop的二进制文件到各个节点。最后,建议用户查看详细的日志,以便进一步定位问题。 同时,用户可能不太清楚这些配置项的具体位置和如何修改,所以在回答中需要给出具体的配置示例,并提醒用户替换实际路径。此外,用户可能没有意识到分布式环境中所有节点都需要相同的配置,可能需要同步配置文件并重启服务。 还需要考虑其他可能性,比如Hadoop版本兼容性问题,或者类路径被其他配置覆盖,但根据错误信息,最可能的原因还是HADOOP_MAPRED_HOME的配置错误。因此,重点应放在检查这些配置上,并逐步排除问题。</think>这个错误信息表明Hadoop MapReduce作业的Application Master(MRAppMaster)无法启动,核心问题是类路径配置错误。以下是分步骤排查和解决方案: ----- ### **关键错误分析** ```log Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster ``` 此错误直接表明YARN无法定位MapReduce的核心组件,通常由以下配置缺失引起: ----- ### **第一步:检查 `mapred-site.xml` 配置** 在Hadoop配置目录(`$HADOOP_HOME/etc/hadoop`)中确认以下配置: ```xml <!-- 必须替换${...}为实际Hadoop安装路径,例如/usr/local/hadoop --> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/path/to/your/hadoop</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/path/to/your/hadoop</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/path/to/your/hadoop</value> </property> ``` **验证要点:** 1. 绝对路径必须指向Hadoop安装目录(如 `/usr/local/hadoop`) 2. 禁止保留 `${...}` 占位符 3. 所有节点需同步此配置文件 ----- ### **第二步:验证环境变量** 在 `hadoop-env.sh` 或 `yarn-env.sh` 中添加: ```bash export HADOOP_MAPRED_HOME=/path/to/your/hadoop export HADOOP_CLASSPATH=$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/* ``` ----- ### **第三步:检查Hadoop安装完整性** 确认以下JAR文件存在: ```bash ls $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-app-*.jar ``` 如果缺失,需重新编译或下载完整的Hadoop发行版。 ----- ### **第四步:排查权限问题** 确保Hadoop安装目录权限一致: ```bash chmod -R 755 /path/to/hadoop # 所有节点需同步权限 ``` ----- ### **第五步:分布式缓存验证** 在 `yarn-site.xml` 中启用类传播: ```xml <property> <name>yarn.nodemanager.remote-app-log-dir</name> <value>/tmp/logs</value> </property> <property> <name>yarn.nodemanager.localizer.cache.cleanup.interval-ms</name> <value>600000</value> </property> ``` ----- ### **操作后重启流程** 1. 停止所有Hadoop服务 2. 删除所有临时目录: ```bash rm -rf /tmp/hadoop* /tmp/logs ``` 3. 重新格式化HDFS(仅首次安装需要): ```bash hdfs namenode -format ``` 4. 重启Hadoop集群 ----- ### **日志深度排查** 通过提示的日志页面访问: ``` http://hadoop01:8088/cluster/app/application_1741846445680_0001 ``` 检查 `stderr` 和 `syslog` 中的类加载细节。 ----- **数学验证(辅助理解)** 当作业提交时,YARN的资源分配可用如下公式表达: $$ R_{\text{total}} = \sum_{i=1}^{N} (C_i \cdot M_i) $$ 其中 $C_i$ 为容器数,$M_i$ 为单容器内存。若资源配置不足会导致AM启动失败。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值