运行hadoop命令时,报错:
PS H:\Users\Zhang> hadoop version
系统找不到指定的路径。
Error: JAVA_HOME is incorrectly set.
Please update G:\GreenSoftwares\hadoop-2.7.3\conf\hadoop-env.cmd
'-Xmx512m' 不是内部或外部命令,也不是可运行的程序
原因是环境变量JAVA_HOME的值存在空格,例如我的Java安装在G:\Program Files\Java\jdk1.8.0_281 ,就会导致报错。网上现有的教程一般建议把这个jdk文件夹移动(或复制)到一个没有空格的路径下,或者采用缩写(PROGA~1这种),但这样要么会导致之前一些基于绝对路径的设置出错,要么会浪费存储空间,要么存在将来万一有一个也是PROGA开头的文件夹冒名顶替导致出错的隐患。 而利用Windows系统的符号链接功能,可以实现看似复制了一份jdk,实际只在硬盘保留一份jdk的效果。 在PowerShell下,以管理员身份执行:
New-Item -ItemType SymbolicLink -Path ./ -Name javashortlink -Target "G:\Program Files\Java"
该命令意为,在当前目录下新建一个名为javashortlink 的软链接,指向"G:\Program Files\Java" 。 最终的效果如图所示——在G:\javashortlink 下多了一堆JDK。 为了进一步验证这真的是一个软链接,咱们也可以在原始位置G:\Program Files\Java 新建一个文本文档,如上图,该文档是可以在javashortlink中看到的。 接下来,你需要将环境变量JAVA_HOME修改为这个软链接下的某个文件夹路径。 例如在PowerShell中执行
$env:java_home="G:\javashortlink\jdk1.8.0_281"
以临时修改环境变量JAVA_HOME。 最后,重新运行Hadoop,就不会再报这个JAVA_HOME错误了。
|