Mac环境下安装ApproxMapreduce时JAVA_HOME路径错误求助
这个错误的核心原因很直观:你的JAVA_HOME路径被重复拼接了,导致最终生成的Java执行路径变成了/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java/bin/java——末尾多了一层/bin/java。这大概率是因为ApproxHadoop(为Hadoop 1.1.2开发)的脚本逻辑和你当前Hadoop 3.0.0的环境变量配置不兼容导致的,给你几个具体的解决步骤:
第一步:确认正确的JAVA_HOME路径
先在终端执行这个命令,拿到Mac上真正有效的JDK根路径:/usr/libexec/java_home输出应该类似
/Library/Java/JavaVirtualMachines/jdk1.8.0_xxx.jdk/Contents/Home,这个路径下已经包含bin/java,绝对不能在后面再加/bin/java。第二步:修复ApproxMapreduce脚本的JAVA_HOME引用
找到ApproxHadoop项目里的启动脚本(比如主hadoop脚本或approx-mapreduce相关执行文件),打开后检查处理JAVA_HOME的逻辑:- 如果脚本里写了
$JAVA_HOME/bin/java,但你的JAVA_HOME被错误设置成带/bin/java的路径(或脚本读取了错误路径),就会导致重复。 - 直接修改脚本里的JAVA_HOME配置,要么硬编码成第一步拿到的正确路径,要么改成动态读取:
export JAVA_HOME=$(/usr/libexec/java_home)
确保最终执行Java的命令是
$JAVA_HOME/bin/java,而非重复拼接的错误路径。- 如果脚本里写了
第三步:临时覆盖JAVA_HOME快速测试
如果不想改脚本,可以在运行ApproxMapreduce命令前,临时设置正确的JAVA_HOME:export JAVA_HOME=$(/usr/libexec/java_home) # 然后执行你的ApproxMapreduce启动命令,比如: # ./approx-hadoop jar your-job.jar这个方法能快速验证是不是JAVA_HOME路径的问题。
第四步:适配Hadoop 3.0.0的环境变量逻辑
因为ApproxHadoop是为Hadoop 1.1.2开发的,而Hadoop 3.x的环境变量配置(比如hadoop-env.sh)和旧版本有差异:- 找到ApproxHadoop项目里的环境配置文件(比如
hadoop-env.sh),把你Hadoop 3.0.0的hadoop-env.sh里的JAVA_HOME配置复制过去,确保两者环境变量一致。 - 避免ApproxHadoop的脚本读取到系统默认的浏览器Java插件路径(就是错误提示里的
JavaAppletPlugin.plugin,这不是我们需要的JDK)。
- 找到ApproxHadoop项目里的环境配置文件(比如
内容的提问来源于stack exchange,提问作者JDDD

