设置HADOOP那些坑

运行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目录下即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值