Mac M1环境下Hadoop 3.3.4 MapReduce任务启动失败排查求助
解决Mac M1上Hadoop 3.3.4 MapReduce任务的JAVA路径错误问题
核心原因
Mac M1为ARM64架构,Hadoop的YARN容器默认可能尝试调用x86架构的Java路径,或者容器内未正确继承/设置JAVA_HOME环境变量,导致找不到Java可执行文件。
具体修复步骤
1. 确认本地JAVA_HOME的正确路径
在终端执行echo $JAVA_HOME,获取类似/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home的路径,确保使用的是ARM64版本JDK(不要用依赖Rosetta兼容的x86版本)。
2. 修改YARN配置文件传递环境变量
编辑$HADOOP_HOME/etc/hadoop/yarn-site.xml,添加以下配置,强制在容器中注入JAVA_HOME:
<property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME};JAVA_HOME=${JAVA_HOME}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME};JAVA_HOME=${JAVA_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME};JAVA_HOME=${JAVA_HOME}</value> </property>
3. 固定hadoop-env.sh中的JAVA_HOME
确保$HADOOP_HOME/etc/hadoop/hadoop-env.sh里的JAVA_HOME为硬编码的绝对路径,避免依赖系统环境变量:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
替换为你实际获取到的JAVA_HOME路径。
4. 检查MapReduce核心配置
编辑$HADOOP_HOME/etc/hadoop/mapred-site.xml,确认以下配置:
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.application.classpath</name> <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value> </property>
5. 重启Hadoop服务
执行命令重启所有服务:
stop-all.sh start-all.sh
或单独重启YARN与MapReduce服务:
stop-yarn.sh && stop-mapred.sh start-yarn.sh && start-mapred.sh
6. 验证修复效果
重新运行wordcount示例:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input /output
注意提前创建/input目录并上传测试文件,/output目录不能预先存在。
额外排查点
- 若问题仍存在,执行
java -version确认JDK架构,输出需包含aarch64字样,确保是ARM64版本。 - 避免使用通过Rosetta安装的x86版本JDK,Hadoop容器在ARM架构下无法兼容该环境。
内容的提问来源于stack exchange,提问作者Jatin
相关产品推荐
相关产品推荐

