文章目录
- [1. 复现错误](#1. 复现错误)
- [2. 分析错误](#2. 分析错误)
- [3. 解决问题](#3. 解决问题)
-
- [3.1 下载Hadoop](#3.1 下载Hadoop)
- [3.2 配置Hadoop](#3.2 配置Hadoop)
- [3.3 下载winutils](#3.3 下载winutils)
- [3.4 配置winutils](#3.4 配置winutils)
1. 复现错误
今天在运行同事给我的项目,但在项目启动时,报出如下错误:
java
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:548)
at org.apache.hadoop.util.Shell.getHadoopHomeDir(Shell.java:569)
at org.apache.hadoop.util.Shell.getQualifiedBin(Shell.java:592)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:689)
at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:78)
at org.apache.hadoop.conf.Configuration.getBoolean(Configuration.java:1665)
at org.apache.hadoop.security.SecurityUtil.setConfigurationInternal(SecurityUtil.java:104)
at org.apache.hadoop.security.SecurityUtil.<clinit>(SecurityUtil.java:88)
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:316)
at org.apache.hadoop.security.UserGroupInformation.setConfiguration(UserGroupInformation.java:365)
at com.test.main(GetHudiSchemaByMetaStore.java:25)
Caused by: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.
at org.apache.hadoop.util.Shell.checkHadoopHomeInner(Shell.java:468)
at org.apache.hadoop.util.Shell.checkHadoopHome(Shell.java:439)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:516)
... 7 more
即java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.
2. 分析错误
通过java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.错误可知,这是未设置HADOOP_HOME 和hadoop.home.dir 。
HADOOP_HOME和hadoop.home.dir主要是干嘛的呢?是配置在本地环境变量中的Hadoop地址。
那么需要下载Windows版本的Hadoop来设置么?如果是远程连接Linux上的Hadoop集群,则完全不需要再下载安装Windows版本的Hadoop!!!
本地远程连接Hadoop系统时需要在本地配置相关的Hadoop变量,主要包括hadoop.dll与winutils.exe等。
【注意】由于hadoop主要基于linux编写,winutil.exe主要用于模拟linux下的目录环境。
当Hadoop在windows下运行或调用远程Hadoop集群的时候,需要该辅助程序才能运行。winutils是Windows中的二进制文件,适用于不同版本的Hadoop系统并构建在Windows VM上,该VM用以在Windows系统中测试Hadoop相关的应用程序。
3. 解决问题
了解到原因之后,可以根据安装Hadoop集群的版本,下载相应的winutils。
3.1 下载Hadoop
如果你还没有安装Hadoop,可以按如下方式下载:
-
去
hadoop官网下载,镜像下载链接:https://mirrors.tuna.tsinghua.edu.cn -
也可以下载我百度网盘中的
3.2.1版本的:-
提取码:y6i4
下载完成后,会得到hadoop-3.2.1.tar.gz,因为我下载的是hadoop-3.2.1版本。
解压hadoop-3.2.1.tar.gz得到hadoop-3.2.1,复制hadoop-3.2.1到你想要的文件夹中。
我是把hadoop-3.2.1放在D:\Software文件夹下。
接下来,我便介绍如何配置Hadoop。
3.2 配置Hadoop
- 右键此电脑,点击属性:

- 点击高级系统配置

- 点击环境变量

- 在环境变量中的系统变量,点击新建:

- 新建系统变量,填写
变量名和变量值,点击确定
-
变量名:
HADOOP_HOME -
变量值:
D:\Software\hadoop-3.2.1

- 双击系统变量的
path,追加%HADOOP_HOME%\bin


之后点击三次确定退出编辑。
- 查看配置文件
在hadoop-3.2.1/etc/hadoop目录下,找到hadoop-env.cmd,看jdk目录!
如果你之前配置了java_home,不用修改配置:

如果你没有配置java_home,需要把jdk的绝对路径写上,比如:C:\Program Files\Java\jdk1.8.0_102。

3.3 下载winutils
下载winutils,下载离你hadoop最近的版本使用(比如我的hadoop3.2.1,我下载的winutils是3.1.2),不然会出现一些列的问题。
我提供如下两种下载地址:
GitHub下载地址:https://github.com/steveloughran/winutils

由上图可知,截至完稿的时间,github上的更新到3.0.0,但此版本后面出现一些问题,大家尽量安装和你的hadoop对应的版本。
gitee下载链接:https://gitee.com/shockingblue/winutils

由上图可知,截至完稿的时间,gitee上的更新到3.2.1,相对github上的版本较多。
或者,从我的网盘中下载winutils:
-
提取码:orab
3.4 配置winutils
\
- 找到
3.1.2版本winutils的bin文件夹

- 用该目录覆盖掉
hadoop的bin目录。

- 复制成功之后,会看到下面那个
winutils.exe文件:

- 替换后将
bin下面的hadoop.dll拷贝到C:\Windows\System32目录下

- 大功告成,记得重启
idea
配置完成后,一定要重启idea!否则,配置不生效