文章目录
- 1. 复现错误
- 2. 分析错误
- 3. 解决问题
- 3.1 下载Hadoop
- 3.2 配置Hadoop
- 3.3 下载winutils
- 3.4 配置winutils
1. 复现错误
今天在运行同事给我的项目,但在项目启动时,报出如下错误:
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
版本的:-
链接:https://pan.baidu.com/s/1dcywut63xDFSdHIIogZUWw
-
提取码: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
:
-
链接:https://pan.baidu.com/s/1EG67gZ4MLbHONTdUci4cXg
-
提取码:orab
3.4 配置winutils
\
- 找到
3.1.2
版本winutils
的bin
文件夹
- 用该目录覆盖掉
hadoop
的bin
目录。
- 复制成功之后,会看到下面那个
winutils.exe
文件:
- 替换后将
bin
下面的hadoop.dll
拷贝到C:\Windows\System32
目录下
- 大功告成,记得重启
idea
配置完成后,一定要重启idea
!否则,配置不生效