运行spark程序时报错如下:
20/03/30 13:36:20 WARN Shell: Did not find winutils.exe: {}
java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see https://wiki.apache.org/hadoop/WindowsProblems
at org.apache.hadoop.util.Shell.fileNotFoundException(Shell.java:528)
at org.apache.hadoop.util.Shell.getHadoopHomeDir(Shell.java:549)
at org.apache.hadoop.util.Shell.getQualifiedBin(Shell.java:572)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:669)
at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:79)
at org.apache.hadoop.conf.Configuration.getBoolean(Configuration.java:1555)
at org.apache.hadoop.security.SecurityUtil.getLogSlowLookupsEnabled(SecurityUtil.java:497)
at org.apache.hadoop.security.SecurityUtil.<clinit>(SecurityUtil.java:90)
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:293)
at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:281)
at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:837)
at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:807)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:680)
at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2422)
at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2422)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2422)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:293)
at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)
at org.example.JavaDemo.SparkSqlCsvToCsv.main(SparkSqlCsvToCsv.java:44)
Caused by: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.
at org.apache.hadoop.util.Shell.checkHadoopHomeInner(Shell.java:448)
at org.apache.hadoop.util.Shell.checkHadoopHome(Shell.java:419)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:496)
... 16 more
20/03/30 13:36:20 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
需要配置hadoop_home
以管理员身份运行7zip,解压hadoop-3.2.1.tar.gz。(一定要以管理员身份运行,否则会提示没有权限的错误)。
我解压压缩的路径是D:\DevRun\hadoop-3.2.1
设置HADOOP_HOME=D:\DevRun\hadoop-3.2.1
运行hadoop version 以查看环境变量设置是否成功。
系统找不到指定的路径。
Error: JAVA_HOME is incorrectly set.
Please update D:\DevRun\hadoop-3.2.1\etc\hadoop\hadoop-env.cmd
'-Xmx512m' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
已经设置了JAVA_HOME,还提示这个错误。
发现是java安装在Program Files 路径 下,有空格不行。
解决方法:
1. 将jdk安装在其他没有空格的目录下,重新设置JAVA_HOME. 或者
2. 打开D:\DevRun\hadoop-3.2.1\etc\hadoop\hadoop-env.cmd 文件,将set JAVA_HOME=%JAVA_HOME% 改为
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_121 这样还是会错的,最终改为下面这样才行:
set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_121 还是空格惹的祸。
接下来运行 hadoop version:
Hadoop 3.2.1
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r b3cbbb467e22ea829b3808f4b7b01d07e0bf3842
Compiled by rohithsharmaks on 2019-09-10T15:56Z
Compiled with protoc 2.5.0
From source with checksum 776eaf9eee9c0ffc370bcbc1888737
This command was run using /D:/DevRun/hadoop-3.2.1/share/hadoop/common/hadoop-common-3.2.1.jar
表明HADOOP_HOME设置成功。
个别环境下可能依然会提示缺少winutils.exe或者hadoop.dll
这个请到资源里下载并复制到hadoop\bin目录下即可。