在Hadoop中执行MapReduce作业报错:Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.

!!!成功解决版!!!

一、问题:

提交一个 MapReduce 作业后出现报错Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.

2024-11-06 02:21:34,024 INFO mapreduce.Job:  map 0% reduce 0%
2024-11-06 02:21:34,049 INFO mapreduce.Job: Job job_1730830111605_0001 failed wi                        th state FAILED due to: Application application_1730830111605_0001 failed 2 time                        s due to AM Container for appattempt_1730830111605_0001_000002 exited with  exit                        Code: 1
Failing this attempt.Diagnostics: [2024-11-06 02:21:32.775]Exception from contai                        ner-launch.
Container id: container_1730830111605_0001_02_000001
Exit code: 1

[2024-11-06 02:21:32.838]Container exited with a non-zero exit code 1. Error fil                        e: 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.MRAp                        pMaster

Please check whether your etc/hadoop/mapred-site.xml contains the below configur                        ation:
<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>

二、分析过程: 

我的mapred-site.xml文件里确实没有这些配置,但是配置了也不管用。(这步骤就不弄了,因为没用)

  • 错误信息“Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster”表明 Hadoop 无法找到 MapReduce 应用程序的主类,意味着 MapReduce 框架的 classpath 配置存在问题。
  • 日志中提到的 prelaunch.err 文件显示了错误的详细信息,通常这些错误信息与 Java 的类加载机制有关,也就是 JVM 无法找到所需的类。

三、可能原因:

  • Classpath 配置不正确:如果 yarn.application.classpath 中没有正确地包含 Hadoop 的相关 jar 包路径,就会引发这类错误。Hadoop 需要在 classpath 中找到所有相关的类(包括 MRAppMaster)。
  • 环境变量未设置:在运行 MapReduce 任务之前,Hadoop 框架需要一些环境变量,例如 HADOOP_MAPRED_HOME,这些环境变量指向 Hadoop 安装目录。如果这些环境变量没有正确设置,也会导致类加载失败。

四、解决方案:(具体步骤在后面)

解决类加载的问题:配置确保Hadoop 所需的所有 jar 包和配置文件都包括在 classpath 中。

五、具体步骤:

 1.执行下面的命令
hadoop classpath

先把输出结果复制下来,后面要添加到yarn-site.xml文件中

注:执行hadoop classpath命令会输出Hadoop所有相关的类路径,包括Hadoop的核心库、YARN、MapReduce和HDFS等组件的库文件。这个信息对于调试和配置非常重要。

2.编辑文件:vi yarn-site.xml

通常位于Hadoop的配置目录中,路径一般为$HADOOP_HOME/etc/hadoop/yarn-site.xml

<configuration>标签内添加所需的YARN配置属性

    <property>
        <name>yarn.application.classpath</name>
        <value>将hadoop classpath命令输出的内容全部复制这里</value> 
    </property>

3.重启Hadoop服务

修改配置后,需要重启Hadoop的YARN服务以使更改生效:

$HADOOP_HOME/sbin/stop-yarn.sh

$HADOOP_HOME/sbin/start-yarn.sh

解决 `Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster` 错误的方法如下: 1.Hadoop安装目录下找到 `mapred-site.xml` 文件(`$HADOOP_HOME/etc/hadoop/mapred-site.xml`),添加以下配置: ```xml <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> ``` 此配置可确保MapReduce应用程序在运行时能够找到所需的环境变量和依赖项,从而解决找不到主类的问题[^1][^3]。 2. 还需在 `mapred-site.xml` 继续添加 `yarn.application.classpath`。可通过 `hadoop classpath` 命令查看具体路径,例如: ```bash hadoop classpath ``` 输出结果可能如下: ``` /opt/module/hadoop-3.1.3/etc/hadoop:/opt/module/hadoop-3.1.3/share/hadoop/common/lib/*:/opt/module/hadoop-3.1.3/share/hadoop/common/*:/opt/module/hadoop-3.1.3/share/hadoop/hdfs:/opt/module/hadoop-3.1.3/share/hadoop/hdfs/lib/*:/opt/module/hadoop-3.1.3/share/hadoop/hdfs/*:/opt/module/hadoop-3.1.3/share/hadoop/mapreduce/lib/*:/opt/module/hadoop-3.1.3/share/hadoop/mapreduce/*:/opt/module/hadoop-3.1.3/share/hadoop/yarn:/opt/module/hadoop-3.1.3/share/hadoop/yarn/lib/*:/opt/module/hadoop-3.1.3/share/hadoop/yarn/* ``` 将此结果添加到 `mapred-site.xml` 中,以确保YARN能够找到所需的类路径[^4]。 3. 编辑 `yarn-site.xml`,添加信息: ```xml <configuration> <property> <name>yarn.application.classpath</name> <value>复制的Hadoop classpath信息</value> </property> </configuration> ``` 这一步是为了让YARN能够正确识别和加载所需的类,从而解决找不到主类的问题[^5]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值